2017-10-22 4 views
0

私はELFファイルとその動作方法の詳細を学ぶために、ユーザープロジェクトのELFローダを作成しています。私は、ダイナミックライブラリ(libc.so.6)からシンボルをロードするアドレスを取得する場所が不思議です。 私はプログラムを逆アセンブルするとき、私が得る:動的シンボルのアドレスはどこから来ますか

$objdump -d test | grep puts 
    400420:  ff 25 f2 0b 20 00  jmpq *0x200bf2(%rip)  # 601018 <[email protected]_2.2.5> 

0x200bf2は機能が行くのアドレスですが、私はそれをどこから入手できますか?

編集:私は、それがロードされていない、それが定義されている場所なので、st_valueは手動でエルフを解析する必要が

答えて

0

無関係です場所を求めています。これは、定義またはされたシンボル(プログラム・エントリ・ポイント、変数のアドレス、等)の全てのリストを含む

この種の情報は、記号表セクションに見出すことができますファイル内で参照されるシンボル、シンボルに関連付けられたアドレス、およびシンボルのタイプを示す何らかの種類のタグを含む。適切にそれを解析し、その後、シンボルテーブルを見つけるあなたはsh_type = SHT_SYMTABのセクションを見つけるまでのセクションを反復するために

The Linux Journalから

シンボルテーブルは、Elf32_Symおよび/またはElf64_Sym構造体の配列です。メソッドのアドレスは、構造体のメンバst_valueに割り当てられます。これは、インデックスst_shndxのセクションヘッダに関連しています。詳細については

、あなたはを参照することができます:

+0

のソースコードを? –

+0

@ZachS、シンボルテーブルは 'Elf32_Sym'や' Elf64_Sym'構造体の配列です。メソッドのアドレスは構造体の 'st_value'メンバに代入されます。シンボルテーブル形式へのリンクを参照として追加しました。 –

+0

これは動的シンボルであるため、ファイルでは定義されていません。定義されている場所(libc.so.6)のst_valueがあります。ロード先のアドレスを取得する方法は不思議です。動的/未定義シンボルのst_valueが0であることが正しくない –

関連する問題