TL; DR:如果我在64位进程的32位进程上调用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位二进制文件,它只是没有错误。
答案 0 :(得分:2)
所以,总而言之,我只是一个菜鸟,它通过一个简单的测试解决了:
如果我尝试使用VirtualQueryEx
代替MEMORY_BASIC_INFORMATION32
,则 MEMORY_BASIC_INFORMATION
失败,错误 24 (ERROR_BAD_LENGTH)
答案是,始终使用MEMORY_BASIC_INFORMATION
。
这就是我调用VirtualQueryEx
MEMORY_BASIC_INFORMATION32 info32;
SIZE_T r32 = VirtualQueryEx(hndl,
(void *) 0x0,
(PMEMORY_BASIC_INFORMATION) &info32,
sizeof(info32));