2

gdb と libbfd を使用して、elf ファイルからグローバル変数情報を取得し、表示しています。libbfd から次のデータを取得できます: グローバル変数の名前、アドレス、およびサイズ。gdb と gdb\MI (ptype、whatis、-var-create & -var-list-children) を使用して、変数とその子の型を取得します。

すべての子の親からアドレス\サイズ\オフセットを取得するにはどうすればよいですか?

例えば

   type = struct {\n"
   unsigned char count;\n"
   unsigned char time;\n
   }\n

この型の変数 A がアドレス 0x000100 にある場合、A.count がサイズ 0x1 の 0x000100 にあり、A.time がサイズ 0x1 の 0x000101 にあることを示したいと思います。

編集: gdb は DWARF 情報を読み取ることができると読みましたが、gdb からこの情報を取得する方法がわかりません。

4

1 に答える 1

3

これが私が最終的にしたことです。サイズを取得するために、私は使用しました:

p sizeof(A.time)

使用したアドレスを取得するには:

p /a &A.time

注:これは、1バイトより大きいサイズの変数にのみ適用されます。ビットフィールドのサイズとオフセットをビット単位で取得できるようにするには、nabbleで提供されている提案に従ってGDBを再コンパイルする必要がありました:ビットフィールド要素のバグのアドレス?

于 2010-08-29T07:39:58.303 に答える