【2021.03.31】页目录表基址

要点回顾

在前文中提到,如果系统要保证某个线性地址是有效的,那么必须为其填充正确的PDE与PTE。

如果想填充PDE与PTE,那么必须能够访问PDT与PTT。

这样就存在两个问题:

  1. 一定已经有 "人" 为我们访问PDT与PTT挂好了PDE与PTE,我们只要找到这个线性地址就可以。
  2. 这个位我们挂好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。

总结

  1. 通过0xC0300000找到的物理页就是页目录表,而不是两份表,其实就是一份。
  2. 这个物理页即是页目录表(PDT),本身也是页表(PTT)。
  3. 页目录表(PDT)是一张特殊的页表,每一项PTE指向的不是普通的物理页,而是指向其他的页表(PTT)。
  4. 如果要访问第N个PDE,有如下公式:0xC0300000 + N *4。

也就是说,在链接:https://blog.csdn.net/qq_18120361/article/details/115254807 中列出的表(PDE与PTE)中:

没有那个单独的PDT表,单独的PDT表本身就是PTT,本身也是一个物理页。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值