kernel - 通过虚拟地址获取心理地址的位置
问题描述
我正在使用内核调试器并想知道虚拟地址的心理内存中的页框。例如我有以下0xfffff12345678911
(只是例子)。我已经执行了以下命令!pte 0xfffff12345678911
,在结果中,我得到 PTE VA 的数据0xfffff22233378911
包含“ 0000000000000000
”为什么我得到零?地址只是示例
解决方案
查找特定二进制文件的 _EPROCESS
0: kd> !process 0 0 cmd.exe
PROCESS ffffb70d1ee22080
SessionId: 15 Cid: 2b3c Peb: c064f0d000 ParentCid: 2bc8
DirBase: 40ad1002 ObjectTable: ffffa68b45e532c0 HandleCount: 69.
Image: cmd.exe
使用所有.force decodeptes和 .cache .force decodeuser将进程上下文设置为 _EPROCESS of Interest并重新加载用户
0: kd> .process /p /r /P ffffb70d1ee22080
Implicit process is now ffffb70d`1ee22080
Loading User Symbols
现在在 pte 中查看指定进程上下文中的某个虚拟地址
让我们搜索任意字符串地址
0: kd> s -a cmd l?80000 "Windows Command Processor"
00007ff6`19e5b49f 57 69 6e 64 6f 77 73 20-43 6f 6d 6d 61 6e 64 20 Windows Command
卫生检查以确认此地址是否属于我们有问题的二进制文件
0: kd> lm a 00007ff6`19e5b49f
start end module name
00007ff6`19e00000 00007ff6`19e65000 cmd (deferred)
是的
让我们拿到pte
0: kd> !pte 00007ff6`19e5b49f
VA 00007ff619e5b49f
PXE at FFFFFCFE7F3F97F8 PPE at FFFFFCFE7F2FFEC0 PDE at FFFFFCFE5FFD8678 PTE at FFFFFCBFFB0CF2D8
contains 0A00000012EDD867 contains 0A000000048E9867 contains 0A000001298EA867 contains 820000007F382005
pfn 12edd ---DA--UWEV pfn 48e9 ---DA--UWEV pfn 1298ea ---DA--UWEV pfn 7f382 -------UREV
让我们使用 !process 输出中的 pfn 和 va 确认 !vtop
0: kd> !vtop 40ad1000 00007ff619e5b49f
Amd64VtoP: Virt 00007ff619e5b49f, pagedir 0000000040ad1000
Amd64VtoP: PML4E 0000000040ad17f8
Amd64VtoP: PDPE 0000000012eddec0
Amd64VtoP: PDE 00000000048e9678
Amd64VtoP: PTE 00000001298ea2d8
Amd64VtoP: Mapped phys 000000007f38249f
Virtual address 7ff619e5b49f translates to physical address 7f38249f.
0: kd>
那正确吗 ?
0: kd> !db 7f38249f l20
#7f38249f 57 69 6e 64 6f 77 73 20-43 6f 6d 6d 61 6e 64 20 Windows Command
#7f3824af 50 72 6f 63 65 73 73 6f-72 3c 2f 64 65 73 63 72 Processor</descr
0: kd>
推荐阅读
- java - eclipse中我的项目顶部出现灰色标记的原因是什么?
- web-services - 继续进行 Web 服务负载测试好吗?
- arrays - MIPS初学者:计算数组中0的数量
- ruby-on-rails - Rails 更新多条记录。如何检查哪个更新失败
- ios - 在应用程序委托中访问全局函数时出现问题
- node.js - 在 Node.js 中替换 JSON 对象的值
- python - 如何仅在引号之间的那部分删除空格
- r - 如何在R中按月/年对变量求和?
- suitecrm - 在编辑视图 suitecrm 中获取通过 url 传递的记录 id
- kettle - 水壶可以从oracle表中导出BLOB数据吗?