作为尝试从零开始编写编译器的一部分,我目前正在处理处理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
这个映射是否需要才能生成可执行文件?或者它们可以完全省略,你仍然会有一个有效的可执行文件吗?
readelf
将不会生成“段到节的映射”输出。 - Employed Russianreadelf --sections --wide a.out
命令找到一个名为“Sections”的部分。需要注意的是,节头是可选的,并且可能根本不存在。 - clockw0rk