0

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

4

1 回答 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 回答