我正在寻找一种方法来获取位于特定地址的符号
我知道我可以使用命令“Info symbol [address]”。问题是我得到最近的符号而不是正确的符号。例如,我得到的答案是:a + 28 in section ....
oposite方式有效:print& c给出了我在“info symbol”命令中使用的地址。
我正在使用保存变量C的结构B的A类,我希望“info symbol”命令返回C而不是A +偏移。
有什么办法吗?也许有一个脚本可以完成这项工作。
答案 0 :(得分:1)
我正在寻找一种获取位于特定地址的符号的方法。 我正在使用保存变量C的结构B的A类,我希望“info symbol”命令将返回C而不是A + offset。
问题是没有这样的符号。也就是说,鉴于此代码:
struct Foo { int x; };
struct Bar { int y; struct Foo xx; };
struct Bar bb;
存在全局符号bb
,但 not 在符号表中存在任何符号bb.xx
。
因此,您不应该问“&bb.xx
处的符号是什么,而是bb
处的符号&bb.xx
的哪个字段。”我不相信这很简单GDB回答这个问题的方法。
你能做的最好的是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
...