微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Windbg vtop 输出大于内存的物理地址

如何解决Windbg vtop 输出大于内存的物理地址

我正在研究 Windows 内核的内部结构,我正在研究的一件事是分页和虚拟地址在 Windows 中是如何工作的。我在尝试使用 windbg 的 !vtop 函数时发现奇怪的事情,我得到了一个不可能的物理地址?

例如,这是我的 !process 0 0 命令输出

PROCESS fffffa8005319b30
    SessionId: none  Cid: 0104    Peb: 7fffffd8000  ParentCid: 0004
    DirBase: a8df3000  ObjectTable: fffff8a0002f6df0  HandleCount:  29.
    Image: smss.exe

当我运行 !vtop a8df3000 fffffa8005319b30 时。我得到以下结果:

lkd> !vtop a8df3000 fffffa8005319b30
Amd64VtoP: Virt fffffa80`05319b30,pagedir a8df3000  
Amd64VtoP: PML4E a8df3fa8
Amd64VtoP: PDPE 2e54000
Amd64VtoP: PDE 2e55148
Amd64VtoP: Large page mapped phys 1`3eb19b30
Virtual address fffffa8001f07310 translates to physical address 13eb19b30

我遇到的问题是我运行此测试的虚拟机只有 4GB,而 13eb19b30 为 5,346,794,288...

当我运行 !dd 13eb19b30dd fffffa8001f07310 时,我得到了相同的结果,所以 Windows 似乎能够以某种方式访问​​这个物理地址......有谁知道这是如何完成的?

I found this post on Cheat Engine that looks like he had a similar problem to me. But they found no solution in that case either

解决方法

我看到您发布了这是 RESE,我也看到它并没有完全理解您要做什么。

我看到了一些差异

您似乎使用了 PFN a8df3000,但似乎 Windbg 似乎使用了 PFN of 187000

顺便说一句,pfn iirc 应该是 dirbase & 0xfffff000

对于虚拟地址,您似乎也在使用进程的 EPROCESS 地址
您确定这是您要使用的正确虚拟地址吗?

您似乎也在使用 lkd,它是本地内核调试提示

我希望你明白 lkd 不是真正的内核调试

,

所以我想我终于能够对这个问题给出一个合理的答案。事实证明,vmware 似乎并没有真正暴露给 VM 连续内存,而是将其分段为不同的内存“运行”。我能够通过使用波动性来确认这一点:

$ python vol.py -f ~/Desktop/Win7SP1x64-d8737a34.vmss vmwareinfo --verbose | less

Magic: 0xbad1bad1 (Version 1)
Group count: 0x5c

File Offset PhysMem Offset Size      
----------- -------------- ----------
0x000010000 0x000000000000 0xc0000000
0x0c0010000 0x000100000000 0xc0000000

这是一篇关于波动性的 github wiki 文章,其中详细介绍了:volatility

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。