2011-08-18 7 views
9

私は、ELF実行可能ファイルの動的シンボルテーブル(.dynsym)を解釈しています。シンボルのアドレスを示すために 'value'属性を使用し、.strtabに文字列の開始のオフセットを示すシンボルテーブル.symtab(各シンボルの16バイト)を正常に解釈できましたセクション。しかし、私は同じ方法を使用して動的なシンボルテーブル(.dynsym)を解釈することができません。私はAliのブログを参考にしました[1]。ELF実行ファイル内の動的シンボルテーブルをどのように解釈するのですか?

私はAli [2]の別のブログを見ましたが、ハッシュテーブルを使ってダイナミックシンボルテーブルをどのように解釈するのか分かりません。明らかに、シンボルテーブルで使用されているのと同じマッピングではありません。ダイナミックシンボルテーブル(.dynsym)の解釈方法を教えてください。

はまた、私が探していELF実行可能ファイルは二つの部分、すなわち.hash.gnu.hashを持っています。どのセクションでハッシュ値を参照しますか?

[1] http://blogs.oracle.com/ali/entry/inside_elf_symbol_tables
[2] http://blogs.oracle.com/ali/entry/gnu_hash_elf_sections

おかげで、よろしく、
Hrishikeshムラリ

+0

さて、私はコメント/回答のための一日を待っていましたが、私は何も持っていません。私は何を結論づけますか?: -/ –

答えて

2

しかし、私は 用いて動的シンボルテーブル(.dynsym)を解釈することができませんよ同じ方法。

".dynstr"セクションで文字列を検索する必要があります。

また、私が見ているELF実行可能ファイルは、 つまり.hashと.gnu.hashという2つのセクションがあります。どのセクションでハッシュ の値を参照しますか?

これは、検索するシンボルの種類によって異なります。私が知っている通り、 GNUスタイルのハッシュテーブルには、ダイナミックリンクに関連する情報しか含まれていません。

他もご覧ください:Jakub Jelinekのdescription of GNU hash tables、GNU binutils mailing listに掲載されています。 ELF仕様から

3

は、各記号は以下の構造用いて定義される:

typedef struct { 
     Elf32_Word 
     Elf32_Addr 
     Elf32_Word 
     unsigned char 
     unsigned char 
     Elf32_Half 
} Elf32_Sym; 

をしたがって、一般的に、これは16バイトであろう。動的シンボルテーブルと静的シンボルテーブルは同じ構造を使用しているため、このテーブルの解析はスタティックとリンクの場合とまったく同じです。もちろん、値の意味は必ずしも同じではありません。

シンボルテーブルのシンボルには、2つの方法で到達できます。まず、すでにシンボルインデックスを知っていれば、そのインデックスに行くことができます。しかし、あなたがシンボルインデックスを持っていないときには、シンボル名だけしか持っていないし、実際にはシンボルテーブルにその名前のシンボルの定義があるかどうかチェックしたいと思う。この2番目の状況では、ハッシュセクションを使用します。それらはシンボルがシンボルテーブルに存在するかどうかを素早く確認するために使用されます:symbol-name-> hash-> symb_index->​​ symbol_table [symb_index] == symbol-nameをチェックします。

+0

* Elf32_Half *が4ではなく2バイトで、4 + 4 + 4 + 1 + 1 + 2 = 16バイトであるため、これは間違っています。また、* ELFCLASS64 *(x86-64)の場合、これは24バイトであることに注意する価値があります。 – krb686

+0

私はあなたが正しいと信じています。私は訂正します。 – JohnTortugo

関連する問題