赞
踩
一、内核对物理内存的管理(MmPfnDatabase)
Windows通过几个全局变量来对物理内存进行管理:
MmPfnDatabase,页帧数据库(也叫FPN数据库),是MMPFN结构体类型的数组,它的索引是物理地址页帧号。
- 1: kd> dq mmpfndatabase
- fffff800`04119228 fffffa80`00000000 000001f4`00000040
- fffff800`04119238 00000000`00000390 00000000`00000000
- fffff800`04119248 00080000`00000001 00000001`ffffffff
- fffff800`04119258 fffffa80`18de7000 01d84429`7d237fba
- fffff800`04119268 fffffa80`18e41580 fffffa80`18e725c0
- fffff800`04119278 00000000`00006c00 00000000`5c7f8000
- fffff800`04119288 fffffa80`18d47b50 00000000`00000001
- fffff800`04119298 fffffa80`18eaa870 00026161`00000000
ffffa80`00000000 则是存放物理地址0,大小一个页(0x1000)的物理地址信息
- nt!_MMPFN
- +0x000 u1 : <unnamed-tag>
- +0x008 u2 : <unnamed-tag>
- +0x010 PteAddress : Ptr64 _MMPTE
- +0x010 VolatilePteAddress : Ptr64 Void
- +0x010 Lock : Int4B
- +0x010 PteLong : Uint8B
- +0x018 u3 : <unnamed-tag>
- +0x01c UsedPageTableEntries : Uint2B
- +0x01e VaType : UChar
- +0x01f ViewCount : UChar
- +0x020 OriginalPte : _MMPTE
- +0x020 AweReferenceCount : Int4B
- +0x028 u4 : <unnamed-tag>
假设我们要找第三个物理地址,也就是物理地址是3000;页帧数据库+_MMPFN大小*第几个
ffffa80`00000000+0x30*3
- 1: kd> dt _mmpfn fffffa80`00000000+30*3
- nt!_MMPFN
- +0x000 u1 : <unnamed-tag>
- +0x008 u2 : <unnamed-tag>
- +0x010 PteAddress : 0xfffff6ff`ffffe838 _MMPTE
- +0x010 VolatilePteAddress : 0xfffff6ff`ffffe838 Void
- +0x010 Lock : 0n-6088
- +0x010 PteLong : 0xfffff6ff`ffffe838
- +0x018 u3 : <unnamed-tag>
- +0x01c UsedPageTableEntries : 0
- +0x01e VaType : 0 ''
- +0x01f ViewCount : 0 ''
- +0x020 OriginalPte : _MMPTE
- +0x020 AweReferenceCount : 0n0
- +0x028 u4 : <unnamed-tag>
- 1: kd> !pte 0xfffff6ff`ffffe838
- VA ffffffffffd07000
- PXE at FFFFF6FB7DBEDFF8 PPE at FFFFF6FB7DBFFFF8 PDE at FFFFF6FB7FFFFFF0 PTE at FFFFF6FFFFFFE838
- contains 000000000020F063 contains 00000000001FF063 contains 00000000001FE063 contains 0000000000003163
- pfn 20f ---DA--KWEV pfn 1ff ---DA--KWEV pfn 1fe ---DA--KWEV pfn 3 -G-DA--KWEV
换而言之,物理地址/0x1000=页帧数据库所在位置
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。