1、获取结构体/类 中成员偏移
简单的方法是将 0 作为结构体或者类 (以下 同称为类)的地址,然后指向成员的地址就可以了;
eg:
struct CT
{
int m_a;
int m_b;
};
int offset = (int)&( (CT*)0)->a); ///< 首先是以0强制转化为CT类的地址,然后指向a
同理
int offset_b = (int ) & (((CT*)0)->b);
2、c++ 暴力获取私有成员的值;
eg:
class CT
{
public:
CT(int a, int b) : m_a(a), m_b(b) {]
private:
int m_a;
int m_b;
};
//////
CT ct(5, 6);
int private_a = *(int *)(CT*)(&ct); ///< ct的地址开始就是 m_a的地址
int private_b = *(int *)(((char*)(CT*)(&ct))+4); ///< 需要注意的是不能直接加4,而要转化为char ,注意步长