VirtualQueryEx和ReadProcessMemory的关系

Relationship between VirtualQueryEx and ReadProcessMemory

本文关键字:关系 ReadProcessMemory VirtualQueryEx      更新时间:2023-10-16

我知道Windows进程是通过加载PE头映射到ram中的,然后是以下部分(文本。数据等),我可以读取他们与ReadProcessMemory,但什么是VirtualQueryEx的点?我认为它应该一次读取一页(分页系统使用的内存页),但我不知道内存页与PE部分有什么关系。如果我只想扫描。text部分,我是否也应该使用VirtualQueryEx,或者页面与其内容不相关?

VirtualQueryEx为您提供有关页面如何分配,它包含哪些一般类型的信息等信息。我在之前的回答中发布了一些演示代码。这将遍历一个进程,并转储有关从操作系统为目标进程分配的每个内存块的一些信息。

ReadProcessMemory将允许您读取指定进程中内存块的实际内容。要使用它,您需要在目标进程中指定一个地址,但它本身并不知道该进程中的位置。

如果你想在某个进程中读取映射的可执行文件的一部分,你通常会使用VirtualQueryEx来查找你关心的部分在内存中的位置已经加载,然后使用ReadProcessMemory来读取你关心的部分。例如,在之前的另一个答案中,我发布了一些代码,用于在提交的进程的所有页面中搜索指定的模式,无论是私有的还是映射的。

根据你正在寻找的东西(特别是如果你想要查看目标进程中的代码之类的东西),你可能想要使用像符号处理程序API这样的东西来找到你关心的部分。VirtualQueryEx以相当粗粒度的方式查看事情——例如,它会告诉您整个可执行文件所在的内存块的基址和大小,但不会告诉您该块(通常是大块)内部的内容。

符号处理程序API可以告诉您(例如)可执行文件中特定函数的地址(如果该信息可用,例如包含调试信息的可执行文件,或者您关心的从exe/dll导出的函数)

要确定哪个内存页属于内存中加载的PE的哪个部分,您必须读取它的PE头,解析它并找到。text, .code, .bss等部分。

VirtualQueryEx返回PMEMORY_BASIC_INFORMATION,其中包含有关该内存页的信息,如读,写,执行标志。