码迷,mamicode.com
首页 > 编程语言 > 详细

《C++反汇编与逆向分析技术揭秘》之十——构造函数和析构函数

时间:2017-12-13 11:29:34      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:逆向分析   body   之一   生成   post   不同   ges   pos   汇编   

 

对象生成时会自动调用构造函数。只要找到了定义对象的地方,就找到了构造函数调用的时机。不同作用域的对象的生命周期不同,如局部对象、全局对象、静态对象等的生命周期各不相同,只要知道了对象的声明周期,便可以推断出构造函数的调用时机

  • 局部对象

技术分享图片

反汇编:

获取对象首地址并调用构造函数:

技术分享图片

对象的地址为:

技术分享图片

进入构造函数,先是push一堆寄存器:

 技术分享图片

还原ecx寄存器,并初始化:

技术分享图片

 构造函数属于成员函数,在调用时要用到this指针。

如何识别?1、构造函数时这个对象在作用域内调用的第一个成员函数,根据this指针可以区分每个对象;2、返回this指针是构造函数的特征之一(这是识别局部变量构造函数的必要条件)

 

  • 堆对象

堆对象的识别重点在于识别堆空间的申请与使用

举例:

技术分享图片

new以及new的大小:

技术分享图片

 返回的地址:

技术分享图片

调用构造函数:

技术分享图片

先判断new是否从成功,如果失败就跳过构造函数:

技术分享图片

 

执行构造函数初始化对象:

技术分享图片

定位到对象的第一个成员变量,并赋值为0xb:

技术分享图片

new对象返回对象的首地址时,也检查了是否为NULL,进行了一次判断,如果失败就跳过构造函数,所以可以从这一点入手,找到堆对象的构造函数

 考虑下我们这里有两个成员变量的情况:

技术分享图片

new的大小变了:

技术分享图片

给第二个成员变量赋值时的定位变了:

技术分享图片

 

《C++反汇编与逆向分析技术揭秘》之十——构造函数和析构函数

标签:逆向分析   body   之一   生成   post   不同   ges   pos   汇编   

原文地址:http://www.cnblogs.com/predator-wang/p/8031071.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!