主要原理就是:首先搞明白对象的内存布局,然后直接用对象的首地址加上某个成员变量在对象中的偏移值去访问。下边代码中的这个例子,对象的内存布局为:

直接用首地址加上偏移值去访问即可。
#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");
}
本文介绍了一种通过直接操作对象内存布局来访问C++类中私有成员的方法。通过对象首地址与成员偏移量的结合,可以绕过权限检查访问私有变量。示例代码展示了如何实现这一过程。
2932

被折叠的 条评论
为什么被折叠?



