以下は非常に優れたリファレンスです:http : //www.ibm.com/developerworks/linux/library/l-dynamic-libraries/。さまざまなレベルのさまざまな参照の最後に参考文献が含まれています。あらゆる詳細な情報を知りたい場合は、ソースhttp://www.akkadia.org/drepper/dsohowto.pdfに直接アクセスできます。(Ulrich DrepperがLinux動的リンカーを作成しました。)
"objdump -h myexe"や "readelf -S myexe"などのコマンドを実行すると、実行可能ファイルのすべてのセクションの概要がわかります。
.interpセクションには、このオブジェクトのシンボルを動的にリンクするために使用されるダイナミックローダーの名前が含まれています。.dynamicセクションは、ダイナミックローダーが読みやすいようにフォーマットされたプログラムヘッダーの抽出です。(したがって、他のすべてのセクションへのポインターがあります。)
.got(グローバルオフセットテーブル)と.plt(プロシージャリンクテーブル)は、動的リンカーによって操作される2つの主要な構造です。.gotは変数の間接参照テーブルであり、.pltは関数の間接参照テーブルです。各実行可能ファイルまたはライブラリ(「共有オブジェクト」と呼ばれます)には独自の.gotと.pltがあり、これらは実際には他の共有オブジェクトに含まれている、その共有オブジェクトによって参照されるシンボルのテーブルです。
.dynsynには、共有オブジェクト内のシンボルに関するすべての情報(ユーザーが定義するものと参照する必要のある外部の両方)が含まれています。.dynsynには実際のシンボル名は含まれていません。それらは.dynstrに含まれており、.dynsynは.dynstrへのポインターを持っています。.gnu.hashは、シンボルを名前ですばやく検索するために使用されるハッシュテーブルです。また、ポインター(.dynstrへのポインター、およびバケットチェーンの作成に使用されるポインター)も含まれています。
共有オブジェクトがいくつかのシンボル「foo」を逆参照する場合、動的リンカーは、リンクされているすべての動的オブジェクトで「foo」を検索して、探している「foo」が含まれているオブジェクトを特定する必要があります。 "foo"のアドレスはその共有オブジェクト内にあります。)ダイナミックリンカーは、リンクされたすべての共有オブジェクトの.gnu.hashセクション(または.gashを持たない古い共有オブジェクトの.hashセクション)を検索することでこれを行います。ハッシュセクション。)リンクされた共有オブジェクトで正しいアドレスが見つかると、共有オブジェクトの.gotまたは.pltに配置されます。