0

特定のアドレスにあるシンボルを取得する方法を探しています。
コマンド「Info symbol [address]」を使用できることを知っています。問題は、正しいシンボルではなく、最も近いシンボルを取得することです。たとえば、私が得た答えは次のとおりです: a + 28 in section....
逆の方法: print &c は、"info symbol" コマンドで使用するアドレスを示します。変数 C を保持する構造 B を保持するクラス A を使用しています。「情報シンボル」コマンドが A + オフセットではなく C を返すようにしたいと考えています。
それを行う方法はありますか?作業を行うスクリプトがあるかもしれません。

4

1 に答える 1

1

特定のアドレスにあるシンボルを取得する方法を探しています。変数 C を保持する構造 B を保持するクラス A を使用しています。「情報シンボル」コマンドが A + オフセットではなく C を返すようにしたいと考えています。

問題は、そのような記号がないことです。つまり、次のコードが与えられます。

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

struct Bar bb;

グローバル シンボルが存在しますが、シンボル テーブルにシンボルbbが存在しません。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
    ...
于 2012-05-17T14:29:36.103 に答える