【发布时间】:2021-07-06 22:29:24
【问题描述】:
我正在研究一些内存取证以供娱乐和培训。我尝试在进程使用的内存中找到(虚拟)地址。在运行时,这并不难(我使用 vmmap),但我尝试了解进程将这些信息存储在哪里。我能够在内存转储中找到进程的 _EPROCESS 或 PET,但我不知道进程将其地址存储在哪里。此信息存储在 Windows 操作系统中的什么位置?尤其是当进程需要超过 4K 的页面时..,
提前谢谢
【问题讨论】:
我正在研究一些内存取证以供娱乐和培训。我尝试在进程使用的内存中找到(虚拟)地址。在运行时,这并不难(我使用 vmmap),但我尝试了解进程将这些信息存储在哪里。我能够在内存转储中找到进程的 _EPROCESS 或 PET,但我不知道进程将其地址存储在哪里。此信息存储在 Windows 操作系统中的什么位置?尤其是当进程需要超过 4K 的页面时..,
提前谢谢
【问题讨论】:
我自己没有玩过它,但理论上,从虚拟地址到物理地址的转换是使用称为 PDT 表的结构执行的。当进程运行时,指向该表的指针始终存储在寄存器 CR3 中。该指针表示物理内存地址(否则无法解析 PDT 的基地址)。
当有上下文切换并且另一个进程开始运行时,CR3的值会更新为新进程的PDT的物理地址,该物理地址存储在_KPROCESS(@987654324的Pcb字段中@) 的新进程,在字段 DirectoryTableBase 中。一旦有了 PDT 的基地址,就可以执行从虚拟地址到物理地址的转换。
对此有更深入的解释,带有WinDbg的例子,可以在https://resources.infosecinstitute.com/topic/translating-virtual-to-physical-address-on-windows-physical-addresses/找到
【讨论】: