如何根据给定的虚拟地址确定ELF节的实际内存地址?

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

ELF 可执行文件中的节有一个虚拟地址,程序执行时将加载该节。

类似地,可加载段也有其 vaddr,并且一个段将由一个或多个部分组成。

但是这些地址似乎与 ELF 规范提到的基地址相关(请参阅随附的屏幕截图)

根据此信息,我有以下问题:

我有一个节的vaddr,但我不知道它位于哪个段。在这种情况下,我可以简单地使用基地址在正在运行的程序中找到该节吗?即内存中该节的实际地址 = ELF 头中该节的基地址 + vaddr ?

或者,在某些情况下这可能不起作用?

enter image description here

linux unix elf
1个回答
0
投票

我有一个节的vaddr,但我不知道它位于哪个段。在这种情况下,我可以简单地使用基地址在运行的程序中找到该节吗?

没有。

  1. 如果您有一个 ELF 二进制文件,并且该二进制文件仍然具有节信息,您可以简单地找出给定节属于哪个段。您还可以在
    readelf -Wl elf
    输出中看到该信息。
    (如果您的二进制文件没有节信息,那么您将不知道“节的 vaddr”,所以我假设您仍然有节。)
  2. LOAD
    段的加载通常在它们之间有很大的间隙,因此将基本加载地址添加到段地址将会为first
    LOAD
    段中未包含的任何段在内存中产生错误的位置。

另请参阅此答案

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