在 _EPROCESS 中哪里可以找到进程的内存地址

问题描述

为了娱乐和训练,我正在研究一些记忆取证。我尝试在进程使用的内存中查找(虚拟)地址。在运行时,这并不难(我使用 vmmap),但我尝试了解进程将这些信息存储在哪里。我能够在内存转储中找到进程的 _EPROCESS 或 PET,但我不知道进程在哪里存储其地址。此信息存储在 Windows 操作系统中的何处?尤其是当进程需要超过 4K 的页面时..,

提前谢谢

解决方法

我自己没有玩过,但理论上,从虚拟地址到物理地址的转换是使用称为 PDT 表的结构执行的。当进程运行时,指向该表的指针始终存储在寄存器 CR3 中。该指针表示物理内存地址(否则无法解析PDT的基地址)。

当发生上下文切换并且另一个进程开始运行时,CR3 的值会更新为新进程的 PDT 物理地址,该地址存储在 _KPROCESSPcb 字段新进程的 _EPROCESS),在字段 DirectoryTableBase 中。一旦获得了 PDT 的基地址,就可以执行从虚拟地址到物理地址的转换。

可以在 https://resources.infosecinstitute.com/topic/translating-virtual-to-physical-address-on-windows-physical-addresses/

中找到对此的更深入解释,包括 WinDbg 示例