我正在寻找一种方法来获取位于特定地址中的符号。
我知道我可以使用命令“信息符号 [地址]”。问题是我得到了最近的符号而不是正确的符号。例如,我得到的答案是:a + 28 in section....
相反的方式有效: print &c 给出了我在“信息符号”命令中使用的地址。我正在使用包含包含变量 C 的结构 B 的 A 类,并且我希望“信息符号”命令将返回 C 而不是 A + 偏移量。
有什么办法吗?也许有一个脚本可以完成这项工作。
问问题
348 次
1 回答
1
我正在寻找一种方法来获取位于特定地址中的符号。我正在使用包含包含变量 C 的结构 B 的 A 类,并且我希望“信息符号”命令将返回 C 而不是 A + 偏移量。
问题是没有这样的符号。也就是说,给定以下代码:
struct Foo { int x; };
struct Bar { int y; struct Foo xx; };
struct Bar bb;
存在一个全局符号bb
,但符号表中不存在任何符号bb.xx
。
因此,您不应该问“符号位于什么位置”,而是“符号位于&bb.xx
哪个字段”。我认为 GDB 没有简单的方法来回答这个问题。bb
&bb.xx
您能做的最好的事情是maintenance print type bb
,它将打印(除其他外):
nfields 2 0x2877c70
[0] bitpos 0 bitsize 0 type 0x2877a70 name 'y' (0x287a9ba)
type node 0x2877a70
name 'int' (0x287a9a9)
tagname '<NULL>' (0x0)
code 0x8 (TYPE_CODE_INT)
length 4
...
[1] bitpos 32 bitsize 0 type 0x2877570 name 'xx' (0x287a9c6) << this is the address you want
type node 0x2877570
name '<NULL>' (0x0)
tagname 'Foo' (0x287a98e)
code 0x3 (TYPE_CODE_STRUCT)
length 4
objfile 0x273cc10
...
于 2012-05-17T14:29:36.103 回答