繁体   English   中英

VirtualQueryEx和ReadProcessMemory之间的关系

[英]Relationship between VirtualQueryEx and ReadProcessMemory

我知道Windows进程是通过加载PE头,然后是以下部分(.text .data等...)来映射的,并且我可以使用ReadProcessMemory读取它们,但是VirtualQueryEx有什么意义呢? 我认为它应该一次读取一个页面(寻呼系统使用的内存页面),但我没有看到内存页面与PE部分的关系如何...如果我只想扫描.text部分,我应该使用VirtualQueryEx还是页面与其内容无关?

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

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

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

根据您正在寻找的内容(特别是如果您想查看目标进程中的代码等内容),您可能希望使用类似符号处理程序API的内容来查找您关注的部分。 VirtualQueryEx以相当粗略的粒度查看事物 - 例如,它会告诉您整个可执行文件已映射的整个内存块的基本地址和大小,但不会告诉您内部的内容是什么(通常很大)阻止。

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

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

VirtualQueryEx返回PMEMORY_BASIC_INFORMATION,其中包含有关该内存页面的信息,如read,write,execute flag。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM