当前位置: 首页 > news >正文

应用安全 --- 逆向工程 之 C++类的本质

应用安全 --- 逆向工程 之 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 传进去的语法糖。