MEMORY_BASIC_INFORMATION的MSDN 页面在备注部分指出 MEMORY_BASIC_INFORMATION32 和 MEMORY_BASIC_INFORMATION64 应在目标进程运行在与查询程序不同的体系结构上的情况下指定(使用VirtualQueryEx时))。我还发现一些 SO 帖子在他们对相关问题的回答中指出了这一点。尽管我发现 VirtualQUEeryEx 传递的 MEMORY_BASIC_INFORMATION 的版本与我的程序架构相同,尽管目标是相同的。我想确保我正确解析来自 VirtualQueryEx 的信息。我真的需要指定我使用的 MEMORY_BASIC_INFORMATION 的版本来匹配目标的体系结构吗?如果是这样,为什么 VirtualQueryEx 只返回我的程序架构的版本,我该如何解决这个问题?
问问题
260 次
1 回答
-1
根据我的经验,最好的解决方案是使用常规宏MEMORY_BASIC_INFORMATION
并为 x86 和 x64 构建单独的可执行文件。此外,根据您构建的架构,对所有地址、偏移量和指针使用宏来解析正确的大小。然后根据目标进程的架构使用对应的可执行文件。这将导致最少的头痛。
在这种情况下,如果您使用来自 x64 进程的 MEMORY_BASIC_INFORMATION 并针对 x86 或 x64 进程,它应该可以正常工作。但我不认为这适用于所有结构和 Windows API 函数,因为这只会让你在路上遇到麻烦,这就是我推荐上述方法的原因。
于 2020-04-22T03:26:01.383 回答