1
デバッグ用にコンパイルされないELF実行可能ファイルから構造内の要素のアドレスを取得できますか?elf実行可能ファイルから構造内の要素のアドレス
例、与えられた次のコード:
typedef struct {
int tokyo;
int paris;
int london;
}cities;
cities places;
両方nmおよび '場所' 変数の先頭アドレスを与えreadelfが、そしてreadelfがものsizeof得られます。しかし
Num: Value Size Type Bind Vis Ndx Name
1994983: d0003ae8 12 OBJECT GLOBAL DEFAULT 23 cities
を何I構造内の各要素のアドレスが必要です。だから私が欲しいものを上からです:
d0003ae8 cities.tokyo
d0003aec cities.paris
d0003af0 cities.london
現時点では私の唯一のルートが.debug_infoセクションをダンプし、その後からタイプ・ツリーを解析するreadelfが(-wliao)を使用し、DWARF2デバッグ情報をコンパイルすることですDW_TAG_variableは、base_typeのサイズを加算します。例readelfが:
私はソースコードにアクセスせずにこれを行うための方法を見つける、およびデバッグ情報をオフにする必要があると<1><e00b>: Abbrev Number: 5 (DW_TAG_structure_type)
DW_AT_byte_size : 12
DW_AT_decl_file : 3
DW_AT_decl_line : 25
<2><e013>: Abbrev Number: 6 (DW_TAG_member)
DW_AT_name : tokyo
DW_AT_decl_file : 3
DW_AT_decl_line : 15
DW_AT_type : <df04>
<2><e02e>: Abbrev Number: 6 (DW_TAG_member)
DW_AT_name : paris
DW_AT_decl_file : 3
DW_AT_decl_line : 16
DW_AT_type : <df04>
<2><e02e>: Abbrev Number: 6 (DW_TAG_member)
DW_AT_name : london
DW_AT_decl_file : 3
DW_AT_decl_line : 16
DW_AT_type : <df04>
..
任意のヘルプまたはポインタが高く評価しました。
おかげで、 クリス
gdbはelfファイルを処理するだけでこれらの情報を提供できます。 gdbはどのようにこれを行いますか?型、構造体メンバ、アドレス値などを取得することは可能です。 –
gdbは、ELFファイルに格納されているデバッグ情報を読み取ります。しかし、問題はデバッグ情報なしでこれを行うことでした。 –