2012-02-26 131 views
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> 

..

任意のヘルプまたはポインタが高く評価しました。

おかげで、 クリス

答えて

2

いいえ、これを実行する方法はありません。 ELFだけでは型やオフセットは記述されていません。

構造体のフィールドのタイプと、オブジェクトが構築されているアーキテクチャのABIを知っている場合は、レイアウトを再作成できます。

+0

gdbはelfファイルを処理するだけでこれらの情報を提供できます。 gdbはどのようにこれを行いますか?型、構造体メンバ、アドレス値などを取得することは可能です。 –

+1

gdbは、ELFファイルに格納されているデバッグ情報を読み取ります。しかし、問題はデバッグ情報なしでこれを行うことでした。 –

関連する問題