ELF 可执行文件中的节有一个虚拟地址,程序执行时将加载该节。
类似地,可加载段也有其 vaddr,并且一个段将由一个或多个部分组成。
但是这些地址似乎与 ELF 规范提到的基地址相关(请参阅随附的屏幕截图)
根据此信息,我有以下问题:
我有一个节的vaddr,但我不知道它位于哪个段。在这种情况下,我可以简单地使用基地址在正在运行的程序中找到该节吗?即内存中该节的实际地址 = ELF 头中该节的基地址 + vaddr ?
或者,在某些情况下这可能不起作用?
我有一个节的vaddr,但我不知道它位于哪个段。在这种情况下,我可以简单地使用基地址在运行的程序中找到该节吗?
没有。
readelf -Wl elf
输出中看到该信息。LOAD
段的加载通常在它们之间有很大的间隙,因此将基本加载地址添加到段地址将会为firstLOAD
段中未包含的任何段在内存中产生错误的位置。另请参阅此答案。