私は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
は手動でエルフを解析する必要が
のソースコードを? –
@ZachS、シンボルテーブルは 'Elf32_Sym'や' Elf64_Sym'構造体の配列です。メソッドのアドレスは構造体の 'st_value'メンバに代入されます。シンボルテーブル形式へのリンクを参照として追加しました。 –
これは動的シンボルであるため、ファイルでは定義されていません。定義されている場所(libc.so.6)のst_valueがあります。ロード先のアドレスを取得する方法は不思議です。動的/未定義シンボルのst_valueが0であることが正しくない –