【发布时间】:2020-07-05 07:35:10
【问题描述】:
MSDN page for MEMORY_BASIC_INFORMATION 在备注部分指出,当目标进程运行在与查询程序不同的架构上时(使用VirtualQueryEx 时),应指定 MEMORY_BASIC_INFORMATION32 和 MEMORY_BASIC_INFORMATION64。我还发现一些 SO 帖子在他们对相关问题的回答中指出了这一点。尽管我发现 VirtualQUEeryEx 传递的 MEMORY_BASIC_INFORMATION 的版本与我的程序架构相同,尽管目标是相同的。我想确保我正确解析来自 VirtualQueryEx 的信息。我真的需要指定我使用的 MEMORY_BASIC_INFORMATION 的版本来匹配目标的体系结构吗?如果是这样,为什么 VirtualQueryEx 只返回我的程序架构的版本,我该如何解决这个问题?
【问题讨论】:
-
这只能在调试过程在不同的计算机上运行时使用。当两个进程在相同的comp(具有相同的内核)上运行时-这没用。本机进程始终可以按原样使用
MEMORY_BASIC_INFORMATION,wow64 进程只能查询另一个 wow64 进程 -
好的,有道理。因此,如果我想在我的计算机上获取有关 32 位和 64 位进程的信息,我将不得不编译单独的程序?
-
不,你错了。对于仅从同一台计算机获取信息,请始终按原样仅使用
MEMORY_BASIC_INFORMATION。本机进程始终获得有关任何进程(32 和 64)的正确信息。 wow64进程无论如何只能查询32位进程 -
好的,我想我现在明白了。只要我的调试器是本机的,我就可以安全地使用带有本机或 wow64 目标的默认 MEMORY_BASIC_INFORMATION。对吗?
-
是的。真正的调试器总是必须是本机的(所以在 64 位窗口上总是 64 位)。和 64 位进程总是在
MEMORY_BASIC_INFORMATION中从 32 位和 64 位进程中获得正确的信息
标签: windows msdn virtual-memory virtualquery