主要原理就是:首先搞明白对象的内存布局,然后直接用对象的首地址加上某个成员变量在对象中的偏移值去访问。
下边代码中的这个例子,对象的内存布局为:
直接用首地址加上偏移值去访问即可。
#include <iostream>
using namespace std;
class CNumber
{
public:
CNumber()
{
this->nums=10;
this->nums1=20;
}
void setNums()
{
this->nums=10;
}
private:
int nums;
int nums1;
};
void main()
{
CNumber a;
//不调用this指针访问对象的,绕过权限检查访问private变量
printf("%d\n",a);//nums在a对象中的偏移为0
printf("%d\n",*((int *)(((char*)(&a))+4)));//nums1在a对象中的偏移为4
system("pause");
}