C++逆向之构造函数和析构函数

构造函数与析构函数是类的重要组成部分,它们在类中担任着至关重要的工作。构造函数常用来完成对象生成时数据初始化工作,而析构函数则常用于销毁时释放对象中所申请的资源。
当对象生成时,编译器会自动产生调用其类构造函数的代码,在编码过程中可以为类中的数据成员赋予恰当的初始值。当对象销毁时,编译器同样也会产生调用其类析构函数的代码。

C++逆向之结构体和类

在C++中,结构体和类都具有构造函数、析构函数和成员函数,两者只有一个区别:结构体的访问控制默认为public,而类的默认访问控制是private。对于C++中的结构体而言,public、private、protected的访问控制都是在编译期进行检查,当越权访问时,编译过程中会检查出此类错误并给予提示。编译成功后,程序在执行的过程中不会在访问控制方面做任何检查和限制。因此,在反汇编中,C++中的结构体与类没有分别,两者的原理相同,只是类型名称不同。

C++逆向之数组和指针的寻址

虽然数组和指针都是针对地址操作,但他们有许多不同之处。数组是相同数据类型的数据集合,以线性方式连续存储在内存中;而指针只是一个保存地址值的4字节变量。在使用中,数组名是一个地址常量值,保存数组首元素地址,不可修改,只能以此为基地址访问内存数据;而指针却是一个变量,只要修改指针中所保存的地址数据就可以随意访问,不受约束。

C++逆向之函数工作的原理

先思考两个问题

  • 当函数执行时,程序流程会转到函数体内的实现地址,只有遇到return语句或者“}”符号才返回到下一条语句的地址处,请问编译器是如何确定应该回到什么地址处的?
  • 为什么很多高级语言在传递参数时会将实参复制给形参这一操作呢?