作为尝试从头开始完全编写编译器的一部分,我目前正在处理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
通过查看文件偏移量以及节和段的大小来计算映射。
关于compiler-construction - ELF文件中的“节到段映射”存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23018496/