Windows保护模式学习笔记(八)—— 页目录表基址/页表基址

要点回顾

在上一节课课后题中我们提到过,如果系统要保证某个线性地址是有效的,那么必须为其填充正确的PDEPTE

如果我们想填充PDE与PTE,那么必须能够访问PDTPTT,这样就存在2个问题:

  1. 一定已经有“人”为我们访问PDT与PTT挂好了PDE与PTE,我们只用找到这个线性地址就可以了
  2. 这个为我们挂好PDE与PTE的“人”是谁?

注意:
CR3中存储的是物理地址,不能在程序中直接读取的。如果想读取,也要把Cr3的值挂到PDT和PTT中才能访问,那么怎么通过线性地址访问PDT和PTT呢?

注意:以下所有实验的分页方式均为10-10-12分页

一、页目录表基址

页目录表基址 = 线性地址:C0300000

实验:拆分线性地址C0300000,并查看其对应的物理页

第一步:打开一个进程,获得它的Cr3

我这里打开的是notepad.exe
Cr3

第二步:查看进程的PDT表

进程PDT
注意PDT表中的数据

第三步:拆分线性地址
	十六进制:
	C0300000
=
	二进制:
	1100 0000 00
	1100 0000 00
	0000 0000 0000
=
	十六进制:
	300
	300
	000
第四步:查看线性地址对应的物理页

注意:若不知道怎么查找物理页可以翻看前两篇笔记
物理页
可以发现 物理页的内容PDT表的内容 完全相同

实验总结

  1. 线性地址C0300000对应的物理页就是页目录表
  2. 这个物理页即页目录表本身也是页表
  3. 这个物理页是一张特殊的页表,每一项PTE指向的不是普通的物理页,而是指向其它的页表
  4. 访问页目录表的公式:C0300000 + PDI*4(I=index)

结构图如下:
页目录表基址

二、页表基址

页表基址 = 线性地址:C0000000

实验:拆分线性地址C0000000,并查看其对应的物理页

第一步:打开一个进程,获得它的Cr3

我这里打开的是notepad.exe
Cr3

第二步:查看进程的PDT表

进程PDT
查看前三个PDE所对应的PTT表

第一张PTT表:
第一张PTT表
第二张PTT表:
第二张PTT表
第三张PTT表:
第三张PTT表

第三步:拆分线性地址
	十六进制:
	C0000000
=
	二进制:
	1100 0000 00
	0000 0000 00
	0000 0000 0000
=
	十六进制:
	300
	000
	000
第四步:查看线性地址指向的PDE所对应的PTT表

PTT表
查看前三个PTE所对应的物理页

第一张物理页:
第一张物理页
第二张物理页:
第二张物理页
第三张物理页:
第三张物理页
可以发现 每一项PTE所指向的物理页的内容每一个PDE所指向的PTT表的内容完全相同

第五步:查看线性地址C0001000对应的PTT表

C0001000
发现线性地址C0001000指向的PTT表的第一项PTE线性地址C0000000指向的PTT表的第二项PTE

实验总结

  1. 页表被映射到了从0xC0000000~0xC03FFFFF4M地址空间
  2. 在这1024个表中有一张特殊的表:页目录表
  3. 页目录被映射到了0xC0300000开始处的4K地址空间
  4. 访问页表的公式:0xC0000000 + PDI*4096 + PTI*4(I=index)

结构图如下:
页表基址

总结

  1. 有了0xC0300000和0xC0000000能做什么:
    掌握了这两个地址,就掌握了一个进程所有的物理内存读写权限
  2. 公式总结:
    访问页目录表的公式:C0300000 + PDI*4(I=index)
    访问页表的公式:0xC0000000 + PDI*4096 + PTI*4(I=index)
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值