リンカーとライブラリ

セグメントの内容

オブジェクトファイルセグメントには、1 つまたは複数のセクションが存在します。ただし、プログラムヘッダーはこの事実には関与しません。ファイルセグメントに 1 つのセクションが存在するか複数のセクションが存在するかもまた、プログラム読み込み時に重要ではありません。しかし、さまざまなデータが、プログラム実行時や動的リンク時などには存在しなければなりません。セグメント内のセクションの順序と帰属関係は、異なることがあります。また、プロセッサによっては、固有の制約により、以下の例と異なることがあります。

テキストセグメントのセクション (この章の初めのほうで記述されている) には、読み専用命令/データが存在します。データセグメントには、書き込み可能データ/命令が存在します。すべての特殊セクションの一覧については、表 7-16 を参照してください。特定の実行可能ファイルに存在しているセクションを確認するには、dump(1) を使用してください。

PT_DYNAMIC プログラムヘッダー要素は、後出の 「動的セクション」で説明されているとおり、.dynamic セクションを指し示します。さらに、.got セクションと .plt セクションには、位置に依存しないコードと動的リンクに関係する情報が存在します。

.pltは、テキストセグメントまたはデータセグメントに存在できます (どちらのセグメントに存在するかはプロセッサに依存します)。詳細は、「大域オフセットテーブル (プロセッサ固有)」「手続きリンクテーブル (プロセッサに固有)」を参照してください。

表 7-12 にすでに記述されているとおり、.bss セクションには SHT_NOBITS 型が存在します。このセクションはファイル領域を占めませんが、セグメントのメモリーイメージに与えられます。通常、これらの初期化されていないデータはセグメントの終わりに存在し、その結果、関連付けられているプログラムヘッダー要素において p_memszp_filesz より大きくなります。