1

Linuxで動的バイナリ分析を行っています。プログラムが動的にリンクされており (読み込み時リンク)、アドレス空間のランダム化がない場合、標準ライブラリ関数が呼び出されている場合は関数名を解決する必要があります。逆アセンブルされたコードで、標準ライブラリルーチンへの呼び出しが最初に .plt セクションのアドレスに分岐し、PC がそこで計算されたメモリアドレスでロードされているのを見ました。ところで、それはARM Linuxにありますが、一般的な考え方は同じだと思います。

私はシステムプログラミングの初心者です。ライブラリがどのようにリンクされ、実行時にアドレスが解決されるかについては、あまり知りません。専門家からのアイデアを歓迎します。

4

1 に答える 1

3

PLT はProcedure Linkage Tableの略で、共有ライブラリ内の関数 (およびグローバル変数) をプログラム内のアドレスに解決するテーブルです。

PLT は GOT (グローバル オフセット テーブル) と強く結びついています。共有ライブラリ内のアドレスが呼び出された場合、それらは一緒に遅延バインディングを実行します。最初の呼び出しで、関数の実際のアドレスが解決されます (アドレスのランダム化がなくても、実行ごとに異なる場合があります。これは、ライブラリの順序によって異なります)。ロード/使用)、その後の呼び出しでは、アドレスは GOT で間接的に使用されます。

objdumpや などのツールを使用readelfして、elf ファイルの内容を調べることができます。より詳細な説明は次のとおりです。

http://www.technovelty.org/linux/pltgot.html

http://timetobleed.com/dynamic-linking-elf-vs-mach-o/

于 2012-09-13T08:15:47.673 に答える