MEMORY_BASIC_INFORMATION和VirtualQueryEx在不同的体系结构上

问题描述 投票:0回答:1

MSDN page for MEMORY_BASIC_INFORMATION在备注部分指出,在目标进程运行于与查询程序不同的体系结构(使用VirtualQueryEx时)的情况下,应指定MEMORY_BASIC_INFORMATION32和MEMORY_BASIC_INFORMATION64。我还找到了一些SO帖子,这些帖子在他们对相关问题的回答中指出了这一点。我发现尽管VirtualQUeryEx传递了我的MEMORY_BASIC_INFORMATION版本与我的程序的体系结构相同,尽管有目标版本。我想确保我正确解析了VirtualQueryEx中的信息。我真的需要指定我用来匹配目标体系结构的MEMORY_BASIC_INFORMATION的版本吗?如果是这样,为什么VirtualQueryEx只返回程序体系结构的版本,我该如何解决?

windows msdn virtual-memory virtualquery
1个回答
0
投票

根据我的经验,最好的解决方案是使用常规宏MEMORY_BASIC_INFORMATION并为x86和x64构建单独的可执行文件。另外,对所有地址,偏移量和指针都使用宏,这些宏可以根据构建的体系结构解析为正确的大小。然后根据目标进程的体系结构使用相应的可执行文件。这将导致最少的头痛。

在这种情况下,如果您通过x64进程使用MEMORY_BASIC_INFORMATION并以x86或x64进程为目标,则应该可以正常工作。但是我不认为它可以与所有结构和Windows API函数一起使用,因为那样只会使您遇到麻烦,这就是为什么我推荐上述方法的原因。

© www.soinside.com 2019 - 2024. All rights reserved.