下载此文档

c++继承关系(含虚函数) 内存结构分析.doc


文档分类:IT计算机 | 页数:约4页 举报非法文档有奖
1/4
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/4 下载此文档
文档列表 文档介绍
C++ 继承关系( 含虚函数) 内存结构分析以及动态绑定的细节分析一. 说明本文较为深入的研究 C++ 的继承( 含多重继承) 情况下带虚函数时的实例内存结构,较为深入的剖析了继承实例间是如何组织的,以及动态绑定的实现细节。二. 依据以下阐述的细节均依据 VS2005 生成的 DEBU G模式程序在 IDA Pro5. 2反编译所得,部分数据结构根据程序分析得出。三. 术语说明对于以下将频繁用到的术语,我可能简写为如下 classX:RTTI_COL x 原语: classX:plete Object Locator {for x} classX:RTTI_CHD 原语: classX:RTTI class Hierarchy Descriptor classX:RTTI_BCD 原语: classX:RTTI Base class Descriptor 以上简写均采用单词首字母缩写, 其中 Derive 表示派生类,x 表示 Derive 的一个基类, classX 表示以上任意类四. 分析 1. 派生类内存分布及虚表 Figure 1: 派生类实例对象内存分布及虚表映射如上图, 其中左部为派生类 class 的实例对象内存格局( 继承来自 A,B ), 其中第一项为 base A 的虚表地址(A,B 数据在 class 实例中布局顺序是按照 Derive 在声明时继承顺序决定 Derive :RTTI_COL x virtual Derive::fun1(overwrite by derive class) for base A virtual A::fun2( inherit from base A) for base A...... virtual fun(if derive own virtual itslef) for derive * perhaps not vfTable for base A data of base A vfTable for base B data of base B data of Derive itself 的), 从图中箭头可知 base A 的虚表地址指向了一个数组, 里面存放了 Derive 对应的虚函数地址: ①首先存放重写过的 base A 声明的的虚函数地址( 如果虚函数是从基类继承过来的,那么虚表中存放的也是 base A 中该函数地址)。②然后存放 Derive 自己声明的虚函数( 可能没有)。* 注意: vfTable 地址指向的虚表是从右边表格黄色以下位置开始, 黄色以上是虚表附加信息,不为虚表所有,为本人 IDA Pro 反汇编分析所得。其中 Derive :RTTI_COL x 是定位对象所使用的相关数据结构,其结构经反汇编如下: 2. classX : pl ete Object Locator {for x} Field Length Remark reserve _1 4 not used,filled with 0x00 offset_x 4 the offset of vfTable( for x) and the base address of classX reserve _3 4 not used,filled with 0x00 pTypeDescriptor 4 a

c++继承关系(含虚函数) 内存结构分析 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数4
  • 收藏数0 收藏
  • 顶次数0
  • 上传人ranfand
  • 文件大小75 KB
  • 时间2017-05-19