コンパイラをゼロから完全に作成しようとする一環として、現在、ELF ファイルを処理する部分に取り組んでいます。
それらに関するいくつかの記事と仕様をざっと読んだ後でも、セクションからセグメントへのマッピングがどこに保存されているかがよくわかりません。NASM+ld によって生成された小さな実行可能ファイルを観察すると、.text セクションが何らかの形で LOAD タイプのプログラム ヘッダーにマップされていることがわかりますが、どうすればよいのでしょうか?
入力として小さな (動作する) 実行可能ファイルが与えられたときの readelf の出力の小さな部分:
Program Headers:
Type Offset VirtAddr PhysAddr
FileSiz MemSiz Flags Align
LOAD 0x0000000000000000 0x0000000000400000 0x0000000000400000
0x0000000000000084 0x0000000000000084 R E 200000
Section to Segment mapping:
Segment Sections...
00 .text
このマッピングは、実行可能ファイルが機能するために必要ですか? または、それらを完全に省略しても、有効な実行可能ファイルを保持できますか?