windbg由虚拟地址查找对应物理地址(内核调试)

本文详细解析了从虚拟地址到物理地址的转换过程,包括通过PTE指令找到PFN,根据PFN和相对地址确定物理地址,以及对比虚拟内存与物理内存的一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(1)虚拟地址通过pte指令,找到pfn

假设虚拟地址为0xfffff880`00d5e9e0

0: kd> !pte 0xfffff880`00d5e9e0
                                           VA fffff88000d5e9e0
PXE at FFFFF6FB7DBEDF88    PPE at FFFFF6FB7DBF1000    PDE at FFFFF6FB7E200030    PTE at FFFFF6FC40006AF0
contains 000000007FF84863  contains 000000007FF83863  contains 000000007FF8C863  contains 8000000000BE0963
pfn 7ff84     ---DA--KWEV  pfn 7ff83     ---DA--KWEV  pfn 7ff8c     ---DA--KWEV  pfn be0       -G-DA--KW-V

找到pte对应的pfn为0xbe0,单位是4k(4096)。

(2)根据pfn和相对地址,找到虚拟地址对应物理地址位置

pfn为0xbe0,则物理页地址是0xbe0000(0xbe0 × 0x1000)。

页内偏移为0x9e0(0xfffff880`00d5e9e0)

那么 物理地址=物理页地址+页内偏移 = 0xbe0000+0x9e0 = 0xbe09e0

(3)打印物理内存和虚拟内存

打印物理内存

0: kd> !dc 0xbe09e0
#  be09e0 00000114 00000006 00000001 00001db1 ................
#  be09f0 00000002 00000000 00000000 00000000 ................
#  be0a00 00000000 00000000 00000000 00000000 ................

打印虚拟内存

0: kd> dc 0xfffff880`00d5e9e0
fffff880`00d5e9e0  00000114 00000006 00000001 00001db1  ................
fffff880`00d5e9f0  00000002 00000000 00000000 00000000  ................
fffff880`00d5ea00  00000000 00000000 00000000 00000000  ................

 

发现两者相同

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值