c++ - VA 和内存地址

标签 c++ memory-address portable-executable coff

这应该是一个简单的问题:我知道 VA = RVA + PE 的 imagebase,现在我试图在反汇编程序中找到一个字符串,恰好位于 .text 部分的 0042720E。

imagebase是400000,2720E是RVA,到现在没问题。

但为什么当我在调试器中加载 exe 时,指令映射到的内存是 0140720E?

0140720E(我在 ram 中看到的)和 0042720E(VA)的区别在于 FE0000,这是为什么?我错过了什么吗?

最佳答案

实际上只有两种可能性:发生了重新分配或者您弄错了 RVA。它更有可能是重新分配,特别是如果您由于 ASLR 而在 Windows Vista 或 Windows 7 上运行。根据您的连接方式和您使用的调试器,可以让调试器调整报告的地址以匹配 PE 中指定的基本部分加载地址,ollydbg 是其中之一(您必须通过 ollydbg 启动应用程序,对于dll)

关于c++ - VA 和内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5780620/

相关文章:

c# - 如何从非托管应用程序获取文本到 C# 应用程序?

c++ - 如果加载到应用程序,DLL 中的函数地址是否可以更改?

c - `*p=&` 和 `p=&` 之间的区别

windows - .pdata 部分中包含的结构

c++ - 使用 OpenCV 和 BCM2835 在 Raspberry Pi 上工作

c++ - 是否有任何库或工具可以计算 Linux 下 C/C++ 中不同进程的 cpu 使用率和其他一些参数?

c++ - 我在 Xcode 中使用 C++11 时遇到一些问题

c - 32位地址位置混淆...(C语言编程)

c++ - HMODULE 重建导入地址表 IAT 时处理错误

c++ - PE文件解析c/c++