问题描述
为了娱乐和训练,我正在研究一些记忆取证。我尝试在进程使用的内存中查找(虚拟)地址。在运行时,这并不难(我使用 vmmap),但我尝试了解进程将这些信息存储在哪里。我能够在内存转储中找到进程的 _EPROCESS 或 PET,但我不知道进程在哪里存储其地址。此信息存储在 Windows 操作系统中的何处?尤其是当进程需要超过 4K 的页面时..,
提前谢谢
解决方法
我自己没有玩过,但理论上,从虚拟地址到物理地址的转换是使用称为 PDT 表的结构执行的。当进程运行时,指向该表的指针始终存储在寄存器 CR3 中。该指针表示物理内存地址(否则无法解析PDT的基地址)。
当发生上下文切换并且另一个进程开始运行时,CR3 的值会更新为新进程的 PDT 物理地址,该地址存储在 _KPROCESS
(Pcb
字段新进程的 _EPROCESS
),在字段 DirectoryTableBase
中。一旦获得了 PDT 的基地址,就可以执行从虚拟地址到物理地址的转换。