在地址获取符号

时间:2012-05-17 08:13:49

标签: gdb

我正在寻找一种方法来获取位于特定地址的符号 我知道我可以使用命令“Info symbol [address]”。问题是我得到最近的符号而不是正确的符号。例如,我得到的答案是:a + 28 in section ....
oposite方式有效:print& c给出了我在“info symbol”命令中使用的地址。 我正在使用保存变量C的结构B的A类,我希望“info symbol”命令返回C而不是A +偏移。
有什么办法吗?也许有一个脚本可以完成这项工作。

1 个答案:

答案 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
    ...