【发布时间】:2020-06-11 23:55:45
【问题描述】:
我正在尝试使用 GDB-Python 类型 API (gdb.types) 探索数据类型的内存布局。具体来说,我想找到一种方法来获取在父结构中定义的嵌套结构的所有成员的绝对偏移量。
在 C 中,我定义了:
typedef struct
{
int a;
short bf1:2;
char b:4;
struct //nested struct
{
long x;
long y;
};
} a_struct;
在 gdb 中使用 ptype 命令,我得到:
(gdb) ptype /o a_struct
/* offset | size */ type = struct a_struct {
/* 0 | 4 */ int a;
/* 4:14 | 2 */ short bf1 : 2;
/* 4: 2 | 1 */ char b : 4;
/* XXX 2-bit hole */
/* XXX 3-byte hole */
/* 8 | 16 */ struct {
/* 8 | 8 */ long x;
/* 16 | 8 */ long y;
/* total size (bytes): 16 */
};
/* total size (bytes): 24 */
}
上面的输出将嵌套匿名结构的字段偏移量显示为相对于父结构开头的绝对值,即 x 在字节 8 处,y 在字节 16 处。
我正在尝试使用 GDB Python 类型 API 获得相同的结果,但没有成功。特别是,我使用 gdb.types.deep_items(lookup_type) 方法返回嵌套结构的字段的相对偏移量,即第一个字段 (x) 为 0,第二个字段 (y) 为 8。
有没有什么方法可以使用 GDB Python API 为 x 获得 8 和为 y 获得 16(如 ptype 输出所示)?
谢谢
【问题讨论】: