デバッグ用にコンパイルされていない ELF 実行可能ファイルから構造内の要素のアドレスを取得することは可能ですか?
例、次のコードが与えられた場合:
typedef struct {
int tokyo;
int paris;
int london;
}cities;
cities places;
nm と readelf の両方が変数「places」の開始アドレスを提供し、readelf も sizeof を提供します。
Num: Value Size Type Bind Vis Ndx Name
1994983: d0003ae8 12 OBJECT GLOBAL DEFAULT 23 cities
ただし、必要なのは、構造内の各要素のアドレスです。したがって、上から私が欲しいのは次のとおりです。
d0003ae8 cities.tokyo
d0003aec cities.paris
d0003af0 cities.london
現時点で私の唯一のルートは、dwarf2 デバッグ情報を使用してコンパイルし、readelf (-wliao) を使用して .debug_info セクションをダンプし、DW_TAG_variable から型ツリーを解析して base_type のサイズを加算することです。例の読み取り:
<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>
ソースコードにアクセスせず、デバッグ情報をオフにしてこれを行う方法を見つける必要があります..
ヘルプやポインタをいただければ幸いです。
ありがとう、クリス