考虑这段代码:
struct A {
int64 member;
int32 member2;
virtual void f();
};
struct B {
int16 member3;
virtual void b();
};
struct C : A, B {
virtual void b() override;
};
我有兴趣找到 in 的偏移B
量C
。以前使用其他没有虚拟继承的结构,并且offsetof
第一个成员只有一个基类似乎可以工作。我已经反编译了一些代码(在 IDA 中),基类在这里很好地突出显示(十六进制):
在函数中,这些确切的基类偏移量用于通过将偏移量添加到(通过转换为 a )将void*
's 转换为派生类。结构体,和类似于编译代码中的结构体,包括具有虚函数的类和多个基类。void*
char*
A
B
C
我的问题是他们是怎么做到的,我该怎么做?我尝试过类似i32 offset = (i64)((B*)((C*)NULL));
但没有运气的东西。