作为尝试完全从头开始编写编译器的一部分,我目前正在处理处理 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
这个映射甚至需要有一个工作的可执行文件吗?还是可以完全省略它们而您仍然有一个有效的可执行文件?