【发布时间】:2015-01-02 06:24:47
【问题描述】:
TL;DR:如果我在 32 位进程上从 64 位进程调用 VirtualQueryEx,我应该使用 MEMORY_BASIC_INFORMATION 还是 MEMORY_BASIC_INFORMATION32 ?
嗨!
我有一个 64 位应用程序,可以读取其他进程的内存(OpenProcess、VirtualQueryEx,然后是 ReadProcessMemory)。我想知道我是否应该做一个特殊的检查,看看其他进程是否是 32 位进程。
我的代码是这样的:
MEMORY_BASIC_INFORMATION info;
SIZE_T r = VirtualQueryEx((HANDLE) handle,
(void *) 0x0,
&info,
sizeof(info));
问题是,the documentation of MEMORY_BASIC_INFORMATION 是这样说的:
使调试器能够调试在不同设备上运行的目标 体系结构(32 位与 64 位),使用其中一种显式形式 这个结构。
这两个进程在同一台计算机上运行(相同的架构?),但一个是 32 位进程,另一个是 64 位进程。
我已经在 64 位 windows 8 中测试了这个应用程序,它适用于我的测试用例(在 32 位进程内存中搜索特定字符串),但我不希望它以后适得其反。
注意:我知道this answer,这就是我首先提出这个问题的原因。我用 32 位二进制文件进行了测试,它可以正常工作。
【问题讨论】:
-
不,他们说的调试器功能是this one。您不能可靠地将 VirtualQueryEx() 用于 32 位程序中的 64 位进程。
-
那么,
VirtualQueryEx不被视为调试器?文档看起来模棱两可:(
标签: windows winapi 32bit-64bit