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
Executable&Linkable Formatwikipageには、ELFと、そのプログラムヘッダーとセクションヘッダーの違いを説明する素敵な画像があります。参照 elf(5)
[初期]プログラムヘッダーは、 仮想メモリ (実行可能ファイル)に投影されたセグメント( アドレス空間プロセス 実行中のELF実行可能ファイル)を定義しています。視点) execve(2) 時間。 [final]セクションヘッダーはセクションを定義しています(リンク可能な観点、 ld(1) など...)。各セクションはセグメントに属します(実行時に表示される場合と表示されない場合があります(つまり、メモリにマップされます)。 ELFファイルヘッダーは、プログラムヘッダーテーブルとセクションヘッダーテーブルの場所を示します。
また、 objdump(1) および readelf(1) を使用して、Linuxシステムに存在するいくつかのELFファイル(実行可能ファイル、共有オブジェクト、リンク可能オブジェクト)を調べます。
Levineの Linkers&Loaders 本には、それを詳細に説明する章があります。
そして、Drepperの論文 共有ライブラリの書き方 にもいくつかの良い説明があります。