逆向c++程序和逆向c程序非常相似,只是必须将重点放在解读程序的类层次结构以及辨识类方法调用、构造函数调用,等等
在逆 向的过程中,要尝试考察加载到每个寄存器中的数值特征,这一点很重要,考察什么情况下寄存器被允许指令访问指定的数值非常简单,因为寄存器只用于从内存到 指令或从指令到内存传送数据,在其他情况下,可能会看到同一个寄存器在单个函数中被重复使用和更新,这些都强烈暗示该寄存器被用于存储在一个源代码中定义 的局部变量
堆栈是程序内存中的一块区域,供CPU和程序做短期存储用,可以把堆栈看作短期信息的二级存储区,寄存器用于存放最及时的数 据,而堆栈用于存储稍微长期一些的数据,物理上,堆栈仅仅是为了这个目的从RAM中分配出来的一块区域,堆栈和其他任何数据一样都在RAM中,区别仅仅是 逻辑上的
从高阶视角看堆栈,其作用主要包含:
1.用于临时保存寄存器的值
2.用作局部变量
3.用作函数参数和返回地址
堆是一段托管的内存区域,该区域内允许在运行时动态分配可变尺寸的内存块,程序只需要请求得到一块确定大小的内存块,然后接收指向新分配的块的指针
对于逆向来说,试着定位堆在内存中的地址并正确识别堆分配和堆释放例程是非常有用的,因为这有助于全面理解程序数据分布
在逆 向的过程中,要尝试考察加载到每个寄存器中的数值特征,这一点很重要,考察什么情况下寄存器被允许指令访问指定的数值非常简单,因为寄存器只用于从内存到 指令或从指令到内存传送数据,在其他情况下,可能会看到同一个寄存器在单个函数中被重复使用和更新,这些都强烈暗示该寄存器被用于存储在一个源代码中定义 的局部变量
堆栈是程序内存中的一块区域,供CPU和程序做短期存储用,可以把堆栈看作短期信息的二级存储区,寄存器用于存放最及时的数 据,而堆栈用于存储稍微长期一些的数据,物理上,堆栈仅仅是为了这个目的从RAM中分配出来的一块区域,堆栈和其他任何数据一样都在RAM中,区别仅仅是 逻辑上的
从高阶视角看堆栈,其作用主要包含:
1.用于临时保存寄存器的值
2.用作局部变量
3.用作函数参数和返回地址
堆是一段托管的内存区域,该区域内允许在运行时动态分配可变尺寸的内存块,程序只需要请求得到一块确定大小的内存块,然后接收指向新分配的块的指针
对于逆向来说,试着定位堆在内存中的地址并正确识别堆分配和堆释放例程是非常有用的,因为这有助于全面理解程序数据分布