- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++继承内存分布(带虚函数)及动态绑定细节.doc.doc
C++继承关系(含虚函数) 内存结构分析
以及
动态绑定的细节分析
说明
本文较为深入的研究C++的继承(含多重继承)情况下带虚函数时的实例内存结构,较为深入的剖析了继承实例间是如何组织的,以及动态绑定的实现细节。
依据
以下阐述的细节均依据VS2005 生成的DEBUG模式程序在IDA Pro5.2反编译所得,部分数据结构根据程序分析得出。
术语说明
对于以下将频繁用到的术语,我可能简写为如下
classX:RTTI_COL x 原语:classX:RTTI Complete Object Locator {for x}
classX:RTTI_CHD 原语:classX:RTTI class Hierarchy Descriptor
classX:RTTI_BCD 原语:classX:RTTI Base class Descriptor
以上简写均采用单词首字母缩写,其中Derive表示派生类,x表示Derive的一个基类,classX表示以上任意类
Derive :RTTI_COL xvirtual Derive::fun1(overwrite by derive class) for base Avirtual A::fun2(inherit from base A) for base A. . . . . .virtual fun(if derive own virtual itslef) for derive
* perhaps not分析
1. 派生类内存分布及虚表
vfTable for base Adata of base AvfTable for base Bdata of base Bdata of Derive itself
Figure 1:派生类实例对象内存分布及虚表映射
如上图,其中左部为派生类class的实例对象内存格局(继承来自A,B),其中第一项为base A的虚表地址(A,B数据在class实例中布局顺序是按照Derive在声明时继承顺序决定的),从图中箭头可知base A的虚表地址指向了一个数组,里面存放了Derive对应的虚函数地址:
① 首先存放重写过的base A声明的的虚函数地址(如果虚函数是从基类继承过来的,那么虚表中存放的也是base A中该函数地址)。
② 然后存放Derive自己声明的虚函数(可能没有)。
*注意:vfTable地址指向的虚表是从右边表格黄色以下位置开始,黄色以上是虚表附加信息,不为虚表所有,为本人IDA Pro反汇编分析所得。
其中Derive :RTTI_COL x是定位对象所使用的相关数据结构,其结构经反汇编如下:
classX :RTTI Complete Object Locator {for x}
FieldLengthRemarkreserve_14not used,filled with 0x00offset_x4the offset of vfTable( for x) and the base address of classX reserve_34not used,filled with 0x00pTypeDescriptor4address of classX:RTTI Type DescriptorpHierarchyDescriptor4address of classX:RTTI class Hierarchy DescriptorFigure 2: classX : RTTI Complete Object Locator {for x}反汇编结构
offset_x字段描述 基类x在classX实例内存空间中的起始地址相对于classX基址的偏移(也就是x的vfTable字段在classX内存布局中的偏移)
pHierarchyDescriptor字段存放classX:RTTI class Hierarchy Descriptor 结构的地址,该结构描述了Derive类的内存结构层次信息。
***Remark:对于classX为派生类Derive情况时,该结构描述了基类x相对于Derive的信息,此时表格中所有classX均应以Derive替换;但是当classX为基类x情况时,该结构描述了基类自身的信息,此时表格中所有classX均应以x替换
classX:RTTI class Hierarchy Descriptor
FieldLengthRemarkreserve_14unknownreserve_24unknowndwArrayElemCount4the count of the el
您可能关注的文档
最近下载
- GPS控制网的布设方法.ppt.ppt VIP
- 公关语言学幻灯片.ppt VIP
- 2019版最新18项护理核心制度.docx VIP
- GPS静态网的布设.ppt VIP
- DB32T 2887-2016 曳引电梯钢丝绳电磁检测方法 .pdf VIP
- 《宁夏闽宁镇:昔日干沙滩,今日金沙滩》-中职语文高二同步课件精选(高教版2023·职业模块).pptx VIP
- 2025年5月18日河南省事业单位招聘考试《公共基础知识》试题(含答案).docx VIP
- 2025年5月18日河南省事业单位招聘考试《职业能力测试》试题(含参考答案).docx VIP
- 数据挖掘教案.doc
- DB42T 2390-2025 城市更新规划编制技术规程.docx VIP
文档评论(0)