存储在ELF文件中的"段到段映射"在哪里?

Biz*_*ake 12 compiler-construction elf readelf

作为尝试从头开始编写编译器的一部分,我目前正处理处理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 
Run Code Online (Sandbox Code Playgroud)

这种映射是否需要具有可运行的可执行文件?或者它们可以完全省略,你仍然有一个有效的可执行文件?

Emp*_*ian 20

我仍然不太明白存储段映射的部分.

它们存储在任何地方.

而是readelf通过查看文件偏移量和节和段的大小来计算映射.

  • @CiroSantilli巴拿马文件六四事件法轮功如果节头不存在,则`readelf`将不会产生"截面到片段映射"输出. (3认同)