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));
问题是, MEMORY_BASIC_INFORMATION的文档说:
要使debugging器能够debugging在不同体系结构(32位与64位)上运行的目标,请使用此结构的显式forms之一。
这两个进程在同一台计算机上运行(相同的体系结构?),但一个是32位进程,另一个是64位。
我已经在64位的Windows 8testing了这个应用程序,它适用于我的testing用例(在32位进程内存中search特定的string),但是我不希望它稍后适得其反。
注 :我知道这个答案 ,这就是为什么我首先提出这个问题。 我testing了32位二进制文件,它只是没有错误的工作。
所以,总而言之,我只是一个小白菜,它是通过一个简单的测试来解决的:
VirtualQueryEx
失败,错误24 (ERROR_BAD_LENGTH),如果我尝试使用MEMORY_BASIC_INFORMATION32
而不是MEMORY_BASIC_INFORMATION
答案是, 总是使用MEMORY_BASIC_INFORMATION
。
这就是我打电话给VirtualQueryEx
MEMORY_BASIC_INFORMATION32 info32; SIZE_T r32 = VirtualQueryEx(hndl, (void *) 0x0, (PMEMORY_BASIC_INFORMATION) &info32, sizeof(info32));