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

转载自:https://blog.csdn.net/wesley2005/article/details/81303435

(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  ................

发现两者相同
 

猜你喜欢

转载自blog.csdn.net/ayang1986/article/details/85342737