2

我正在使用 gdb 和 libbfd 从 elf 文件中检索全局变量信息并显示它。我可以从 libbfd 获得以下数据:全局变量名称、地址和大小。我使用 gdb 和 gdb\MI(ptype、whatis、-var-create 和 -var-list-children)检索变量及其子项的类型。

如何从所有孩子的父母那里获得地址\大小\偏移量?

例如

   type = struct {\n"
   unsigned char count;\n"
   unsigned char time;\n
   }\n

如果这种类型的变量 A 在地址 0x000100 中,我想显示 A.count 在 0x000100 中,大小为 0x1,A.time 在 0x000101 中,大小为 0x1。

编辑:我读过 gdb 可以读取 DWARF 信息,但我不知道如何从 gdb 获取这些信息。

4

1 回答 1

3

这就是我最终所做的。为了获得size,我使用了:

p sizeof(A.time)

并获取我使用的地址:

p /a &A.time

注意:这仅适用于大小大于 1 字节的变量。为了能够获得位域大小和位偏移量,我必须根据 nabble 中提供的建议重新编译 GDB:位域元素错误的地址?

于 2010-08-29T07:39:58.303 回答