应用安全 --- 逆向工程 之 C++类的本质
C++ 类 = C 结构体 + 专属于它的一批函数
1. 类里的数据 = C 结构体 class A {int x;int y; }; 在内存里 =struct A {int x;int y; }; 一模一样,没有任何区别。对象就是一块内存,布局完全相同。 2. 成员函数 = 专门操作这个结构体的 C 函数 你写: void A::set(int v) { x = v; } 编译器内部理解成: void A_set(struct A *this, int v) {this->x = v; } 调用: a.set(10); 变成: A_set(&a, 10); 这就是全部真相。 3. 所谓 “面向对象”,汇编里只多了一件事 C++ 比 C 多的唯一一件事: 自动把对象地址当作隐藏第一个参数 this 传进去。 仅此而已。没有魔法,没有高级结构,没有玄学。 4. 扩展一句:带虚函数的类也没变本质 加了 virtual 之后: 结构体前面多了一个指针 vptr 虚函数表是一个函数指针数组 本质依然是:结构体 + 操作它的函数。 终极一句话(可以刻在脑子里) C++ 类,就是给 C 结构体绑定了一批专用函数, 并自动把结构体地址当 this 传进去的语法糖。
免责声明
本文档所有内容仅供安全研究、学术交流与技术学习使用,严禁用于任何未经授权的逆向破解、网络攻击、隐私窃取、恶意软件开发及其他违反《中华人民共和国网络安全法》《数据安全法》等法律法规的行为,使用者应确保已获得目标软件权利人的合法授权并自行承担因使用本文档内容所产生的一切法律责任与后果,作者不对任何直接或间接损害承担任何责任,继续阅读即视为您已知悉并同意上述全部条款。
