19

コンパイラをゼロから完全に作成しようとする一環として、現在、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 

このマッピングは、実行可能ファイルが機能するために必要ですか? または、それらを完全に省略しても、有効な実行可能ファイルを保持できますか?

4

2 に答える 2

28

セクションからセグメントへのマッピングがどこに保存されているのか、まだよくわかりません。

それらはどこにも保存されていません。

代わりに、readelfファイル オフセットとセクションおよびセグメントのサイズを調べてマッピングを計算します。

于 2014-04-12T16:05:28.857 に答える