根据输出部分描述的ld手册:
section [address] [(type)] :
[AT(lma)]
[ALIGN(section_align) | ALIGN_WITH_INPUT]
[SUBALIGN(subsection_align)]
[constraint]
{
output-section-command
output-section-command
...
} [>region] [AT>lma_region] [:phdr :phdr ...] [=fillexp] [,]
地址或>区域代表VMA,即输出部分的虚拟内存地址。
AT()或AT>lma_region代表 LMA,即输出部分的加载内存地址。
我决定仔细查看readelf -e
转储 helloworld elf 文件的节头和程序头。结果如下:
我的问题是:
- 为什么转储的标头中没有LMA?LMA 在 ELF 文件中如何表示?
- 红色矩形中的 Addr 列是什么意思?虚拟机?
- 绿色矩形中的 PhysAddr 是什么意思?
加 1
到目前为止,PhysAddr 似乎是 LMA。