ELFファイルに格納されている「セグメントマッピングのセクション」はどこにありますか?

StackOverflow https://stackoverflow.com//questions/23018496

質問

キュララーを最初から完全に書き込むことの一部として、私は現在、ハンドルのELFファイルの部分に取り組んでいます。

いくつかの記事や仕様をスキミングした後、私はまだセクションマッピングのセクションが格納されている場所がまったく理解していません。 NASM + LDによって生成された小さな実行可能ファイルを観察するとき、.textセクションは、ロードタイプのプログラムヘッダーにManged Mapsedがどのようにマッピングされていることがわかりますが、どのようにしていますか?

入力として小(作業)実行可能ファイルを与えられる場合の小さなリードルフの出力:

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 
.

このマッピングは実行可能ファイルを持つ必要がありますか?それとも完全に省略することができます、そしてあなたはまだ有効な実行可能ファイルを持っているでしょうか?

役に立ちましたか?

解決

セグメントマッピングのセクションが保存されている場所がまだわかりません。

それらはどこにでも保存されていないです。

むしろ、readelfは、セクションとセグメントのファイルオフセットとサイズを調べることでマッピングを計算します。

他のヒント

私は去勢されたロシア語に従ってテストをしました。

readelf -l ./libandroid_sers.so

Elf file type is DYN (Shared object file)
Entry point 0x0
There are 6 program headers, starting at offset 52

Program Headers:
  Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
  PHDR           0x000034 0x00000034 0x00000034 0x000c0 0x000c0 R   0x4
  LOAD           0x000000 0x00000000 0x00000000 0x0f830 0x0f830 R E 0x1000
  LOAD           0x010000 0x00010000 0x00010000 0x00cf4 0x011ac RW  0x1000
  DYNAMIC        0x010540 0x00010540 0x00010540 0x00130 0x00130 RW  0x4
  GNU_STACK      0x000000 0x00000000 0x00000000 0x00000 0x00000 RW  0
  EXIDX          0x00f2e8 0x0000f2e8 0x0000f2e8 0x00548 0x00548 R   0x4

 Section to Segment mapping:
  Segment Sections...
   00     
   01     .hash .dynsym .dynstr .rel.plt .rel.dyn .plt .text .rodata .ARM.extab .ARM.exidx 
   02     .init_array .fini_array .data.rel.ro .dynamic .got .data .bss 
   03     .dynamic 
   04     
   05     .ARM.exidx 
.

01ロードオフセット:0x000000 fileSize 0x0F830
.arm.exidxセクションエンドADDR:16進数(0x00F2E8 + 0x00548)= 0xF830

02ロードオフセット:0x010000ファイルサイズ:0x00cf4
.init_arrayセクションはAddRを開始します:10000H
.BSSセクションエンドADDR:16進数(0x00F2E8 + 0)= 0x10CF4

readelfがSectionsのセクションをSTAMENTESで確実に印刷します。彼らはうまく一致します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top