!pte命令
初学windows分页分段机制,!pte命令是最常用的,PDE和PTE的默认值0xC0600000和0xC0000000很容易让人迷惑。有个朋友跟我吐槽说经常搞混这两个值和虚拟地址转物理地址过程。这里简单说一下。
这两个所谓的默认值指的是进程PDE和PTE所在的虚拟地址,注意不是物理地址。0xC0600000表示页目录的起始加载地址,0xC0000000表示页表起始加载地址。
可以使用0xC0000000结合线性地址直接算出页帧号,以30004为例:
kd> !pte 30004
VA 00030004
PDE at C0600000 PTE at C0000180
contains 000000001A1E2067 contains 0000000007724067
pfn 1a1e2
---DA--UWEV pfn 7724
---DA--UWEV
kd> dd 30004 l8
00030004 000001de eeffeeff 00001002 00000000
00030014 0000fe00 00100000 00002000 00000200
kd> !dd 7724004 l8
# 7724004 000001de eeffeeff 00001002 00000000
# 7724014 0000fe00 00100000 00002000 00000200
kd> dd C0000000+(0*1000)+(30*8) l1
c0000180 07724067
好了,看了这些应该明白了。