【问题标题】:Find address in x64 executable from memory address从内存地址中查找 x64 可执行文件中的地址
【发布时间】:2018-09-17 09:31:32
【问题描述】:

这篇文章 (Find an instruction in an executable file, given its address in a running process?) 包含如何从正在运行的进程的内存地址计算可执行文件中的地址的详细说明。

如果我想将公式应用于 x64 可执行文件,如何确定要使用的基地址?

对于 x86,它是 0x400000。我的假设是这来自可选 PE 标头的 IMAGE_BASE 字段。但是,此字段包含 x64 的值 0x140000000。 x64 二进制中使用的地址实际上比 x86 二进制中使用的地址要小得多。

【问题讨论】:

  • 对于 x86,它是 0x400000 - 这当然不是真的。可以是任何地址。如果您对 Windows 提出此要求 - 例如,您可以使用 [K32]EnumProcessModules。从进程PEB 更高效(但未记录)读取 exe 的图像库(如果您只需要 exe
  • @HansPassant 谢谢。但是我尝试在不实际运行 exe 的情况下确定基地址。
  • 也许我应该更清楚我想要做什么。给定一个反汇编的 Windows 可执行文件,我试图找到引用的字符串和导入的函数(通过导入地址表)。这需要从 RVA 计算文件位置。通过使用链接帖子中的计算,它适用于 x86 机器代码。肯定有办法让它也适用于 x64 吗?

标签: assembly x86-64 reverse-engineering memory-address portable-executable


【解决方案1】:

我尝试在不实际运行 exe 的情况下确定基地址。

如果 exe 未启用地址空间布局随机化,则该 exe 将始终加载到首选映像库中,这是可选标头中 ImageBase 定义的地址。

动态链接库并非如此。他们有一个ImageBase,但如果该位置已被占用,它将在运行时动态加载到其他地方。

因此,如果您谈论的是启用了 ASLR 的进程或 DLL,那么您的要求是不可能的。

【讨论】:

    猜你喜欢
    • 2014-09-06
    • 2014-12-29
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2015-01-08
    • 2019-09-28
    • 1970-01-01
    • 2017-02-24
    相关资源
    最近更新 更多