compiler-construction - ELF文件中的“节到段映射”存储在哪里?

标签 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 


甚至需要此映射具有有效的可执行文件吗?还是可以完全省略它们,而您仍然具有有效的可执行文件?

最佳答案

我仍然不太了解段到段映射的存储位置。


它们不会存储在任何地方。

相反,readelf通过查看文件偏移量以及节和段的大小来计算映射。

关于compiler-construction - ELF文件中的“节到段映射”存储在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23018496/

相关文章:

c - 读取 ELF 文件的程序头内容

assembly - 在 GNU 汇编器中,名称开头的点表示什么?

c - Printf 符号解析

c - 为什么需要 .bss 段?

C 编译器 : arrays as function parameters

parsing - 如何将解析树简化为抽象语法树?

linux - 为什么/lib32/libc.so.6 中有两个 "fopen"符号?

haskell - 总和类型 - 为什么在 Haskell 中 `show (Int | Double)` 与 `(show Int) | (show Double)` 不同

python - 从 ELF 二进制文件中提取函数字节

c++ - 对可执行文件的库加载的操作