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