gpt4 book ai didi

python - 使用 GDB-Python Types API 查找嵌套结构的绝对偏移量

转载 作者:太空宇宙 更新时间:2023-11-03 19:40:43 33 4
gpt4 key购买 nike

我正在尝试使用 GDB-Python Type 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 Type API 获得相同的结果,但没有成功。特别是,我使用 gdb.types.deep_items(lookup_type) 方法,该方法返回嵌套结构的字段的相对偏移量,即第一个字段 (x) 为 0,第二个字段 (y) 为 8。

有没有办法使用 GDB Python API 为 x 获取 8,为 y 获取 16(如 ptype 输出所示)?

谢谢

最佳答案

我现在无法检查,但如果我没记错的话,这个 gdb 插件提供了绝对偏移量:https://blog.mozilla.org/sfink/2018/08/17/type-examination-in-gdb/ 。它产生如下输出:

(gdb) pahole js::jit::ABIArg
offset size
0 16 : struct js::jit::ABIArg {
0 4 : kind_ : js::jit::ABIArg::Kind
4 4 : --> 32 bit hole in js::jit::ABIArg <--
8 8 : u : struct union {...} {
8 +0 1 : gpr_ : js::jit::Register::Code
8 +0 8 : fpu_ : js::jit::FloatRegister::Code
8 +0 4 : offset_ : uint32_t
} union {...}
} js::jit::ABIArg

关于python - 使用 GDB-Python Types API 查找嵌套结构的绝对偏移量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60442223/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com