web-dev-qa-db-ja.com

ELFのプログラムヘッダーとセクションヘッダーの違い

Q1ELFのプログラムヘッダーとセクションヘッダーの違いは何ですか

Q1.1セグメントとセクションの違いは何ですか?

Pheadersはセクションのみを指していると思います。

Q2。 -ファイルヘッダーとプログラムヘッダーの違いは何ですか

Gnu ldリンカースクリプトによると、 Idの使用:GNUリンカー

PHDRS
{
name type [ FILEHDR ] [ PHDRS ] [ AT ( address ) ]
[ FLAGS ( flags ) ] ;
}

プログラムヘッダータイプの後に表示されるFILEHDRおよびPHDRSキーワードを使用して、セグメントの内容をさらに説明することができます。 FILEHDRキーワードは、セグメントにELFファイルヘッダーを含める必要があることを意味します。 PHDRSキーワードは、セグメントにELFプログラムヘッダー自体を含める必要があることを意味します

This is a bit confusing
16
user435739

Executable&Linkable Formatwikipageには、ELFと、そのプログラムヘッダーとセクションヘッダーの違いを説明する素敵な画像があります。参照 elf(5)

[初期]プログラムヘッダーは、 仮想メモリ (実行可能ファイル)に投影されたセグメント( アドレス空間プロセス 実行中のELF実行可能ファイル)を定義しています。視点) execve(2) 時間。 [final]セクションヘッダーはセクションを定義しています(リンク可能な観点、 ld(1) など...)。各セクションはセグメントに属します(実行時に表示される場合と表示されない場合があります(つまり、メモリにマップされます)。 ELFファイルヘッダーは、プログラムヘッダーテーブルとセクションヘッダーテーブルの場所を示します。

また、 objdump(1) および readelf(1) を使用して、Linuxシステムに存在するいくつかのELFファイル(実行可能ファイル、共有オブジェクト、リンク可能オブジェクト)を調べます。

Levineの Linkers&Loaders 本には、それを詳細に説明する章があります。

そして、Drepperの論文 共有ライブラリの書き方 にもいくつかの良い説明があります。

17