【发布时间】: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