gpt4 book ai didi

windows - 从 32 位进程上的 64 位进程调用 VirtualQueryEx 函数

转载 作者:可可西里 更新时间:2023-11-01 10:21:51 30 4
gpt4 key购买 nike

TL;DR:如果我从 64 位进程调用 32 位进程的 VirtualQueryEx,我应该使用 MEMORY_BASIC_INFORMATION 还是 MEMORY_BASIC_INFORMATION32 ?

嗨!

我有一个读取其他进程内存的 64 位应用程序(OpenProcessVirtualQueryEx,然后是 ReadProcessMemory)。我想知道我是否应该做一个特殊检查,看看另一个进程是否是 32 位进程。

我的代码是这样的:

MEMORY_BASIC_INFORMATION info;

SIZE_T r = VirtualQueryEx((HANDLE) handle,
(void *) 0x0,
&info,
sizeof(info));

事情是,the documentation of MEMORY_BASIC_INFORMATION是这样说的:

To enable a debugger to debug a target that is running on a different architecture (32-bit versus 64-bit), use one of the explicit forms of this structure.

这两个进程在同一台计算机上运行(相同的体系结构?),但一个是 32 位进程,另一个是 64 位进程。

我已经在 64 位 Windows 8 中测试了这个应用程序,它适用于我的测试用例(在 32 位进程内存中搜索特定字符串),但我不希望它稍后适得其反。

注意:我知道 this answer ,这就是为什么我首先问这个问题。我用 32 位二进制文​​件进行了测试,它可以正常工作。

最佳答案

所以,总而言之,我只是一个菜鸟,通过一个简单的测试就解决了:

如果我尝试使用 MEMORY_BASIC_INFORMATION32 而不是 MEMORY_BASIC_INFORMATION/,

VirtualQueryEx 失败并出现错误 24 (ERROR_BAD_LENGTH) p>

答案是,始终使用MEMORY_BASIC_INFORMATION

这就是我如何调用 VirtualQueryEx

MEMORY_BASIC_INFORMATION32 info32;
SIZE_T r32 = VirtualQueryEx(hndl,
(void *) 0x0,
(PMEMORY_BASIC_INFORMATION) &info32,
sizeof(info32));

关于windows - 从 32 位进程上的 64 位进程调用 VirtualQueryEx 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26767741/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com