2012-05-17 51 views
0

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

+0

没有必要签署您的文章或提出的问题标签标题您的用户卡和问题标记出现以下问题,问题可以通过标签进行排序和/或搜索。 – yoozer8

回答

1

我正在寻找一种方法来获取坐在特定地址的符号。 我使用的类A保存结构B,其中包含变量C,我希望“信息符号”命令将返回C而不是A +偏移量。

问题是,有没有这样的符号。也就是说,给定这样的代码:

struct Foo { int x; }; 
struct Bar { int y; struct Foo xx; }; 

struct Bar bb; 

存在一个全局符号bb,但确实没有存在任何符号bb.xx在符号表中。

所以,你不应该问什么字段符号bb的坐在&bb.xx“什么符号在&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 
    ...