【发布时间】:2011-11-23 08:05:42
【问题描述】:
在 gcc 中有没有办法,我可以在特定偏移量中定义具有特定成员的结构?
我想通过以下方式定义一个结构体:
struct {
.offset(0xDC) //or something equivalent
int bar;
} foo;
然后是下面的语句:
int a = foo.bar
将与语句相同:
int a = *(int*)((char*)&foo + 0xDC);
* 更新 *
一些背景: 我想访问没有正确定义的导出结构中的成员,它有很多成员 - 我只关心其中的少数几个,并且它们的偏移量(结构原始定义)在每个目标平台上都有点不同(我需要为几个不同的平台编译我的代码)
我已经考虑过这里的 cmets 中提到的填充选项,但是每次我想添加成员时,它都需要我进行一些烦人的计算。 例如:
strcut {
.offset(0xDC)
int bar;
.offset(0xF4)
int moo;
}foo;
那么简单:
struct __attribute__ ((__packed__)) struct {
char pad1[0xD8];
int bar;
char pad2[0x18];
int moo;
}foo;
并且不考虑 sizeof(int) 可以从平台到平台的变化
【问题讨论】:
-
您的意思是bit-fields 吗?
-
我认为不,如果你真的想要恒定的偏移量,我会用强制转换和指针来做到这一点,例如
*((int*)(((char*)p)+0xd8))可以隐藏在宏中。