ELF文件在内存中的布局方式

问题描述 投票:0回答:1

当运行ELF文件并将其各个段加载到内存中时,是否有办法提前知道这些段之间的关系?也就是说,例如,我可以知道rodata段位于bss段之后吗?

linux elf
1个回答
0
投票

是否有一种方法可以预先知道片段之间的相对关系?

是。 ELF文件有两种类型:ET_EXECER_DYN。前者用于可执行文件,后者用于PIE可执行文件和共享库。

ET_EXEC段将在其链接的位置精确中存储在内存中。如果将其段加载到其他位置,则该可执行文件将无法工作。

您可以使用readelf -Wl a.out检查链接的地址。

对于ET_DYN,片段将以链接位置的单个固定偏移量加载。也就是说,如果第一个PT_LOAD段链接到地址0x0,并加载到地址0x1234000,则可以将0x1234000添加到每个后续段的p_vaddr中,以确定它在内存中的加载位置。 。

例如,我是否可以知道rodata段位于bss段之后?

没有rodatabss段-它们是sections。要查看这些部分分配给哪个段,请使用readelf -Wl

© www.soinside.com 2019 - 2024. All rights reserved.