要点回顾

在前文中提到,如果系统要保证某个线性地址是有效的,那么必须为其填充正确的PDE与PTE。
如果想填充PDE与PTE,那么必须能够访问PDT与PTT。
这样就存在两个问题:
- 一定已经有 "人" 为我们访问PDT与PTT挂好了PDE与PTE,我们只要找到这个线性地址就可以。
- 这个位我们挂好PDE与PTE的 "人" 是谁?
页目录表基址(XP系统 10-10-12分页模式)
页目录表基址:0xC0300000。
拆分0xC0300000
1.寻找目标程序CR3
!process 0 0
2.查看CR3物理地址
!dd 24450000
得到了PDT(页目录表)。
3.拆分0xC0300000
0xC0300000 = 1100 0000 0011 0000 0000 0000 0000 0000
前10位二进制:1100 0000 00 -> 300*4 = C00
再10位二进制:11 0000 0000 -> 300*4 = C00
0000 0000 0000
4.寻找PDE
!dd 24450000 + C00
5.寻找PTE
!dd 24450000 + C00
6.查看物理页
!dd 24450000
得到了0xC0300000的物理页,对比第二步的结果可以发现:0xC0300000中储存的内容刚好是PDT(页目录表)的内容。
小结
0xC0300000储存的值就是PDT的基址,如果要访问第N个PDE,那么有公式:0xC0300000 + N *4。
总结
- 通过0xC0300000找到的物理页就是页目录表,而不是两份表,其实就是一份。
- 这个物理页即是页目录表(PDT),本身也是页表(PTT)。
- 页目录表(PDT)是一张特殊的页表,每一项PTE指向的不是普通的物理页,而是指向其他的页表(PTT)。
- 如果要访问第N个PDE,有如下公式:0xC0300000 + N *4。
也就是说,在链接:https://blog.csdn.net/qq_18120361/article/details/115254807 中列出的表(PDE与PTE)中:没有那个单独的PDT表,单独的PDT表本身就是PTT,本身也是一个物理页。![]()
【2021.03.31】页目录表基址要点回顾页目录表基址(XP系统 10-10-12分页模式)总结