PDE和PTE属性(U/S位和PS位和A位和D位)


前言:PDE_PTE属性(U/S位和PS位和A位和D位)的笔记

上一篇笔记已经学习过了R/W位和P位,一个是读写位,还有一个是有效位,这里的话继续来学习相关的U/S位和PS位和A位和D位

U/S位

U/S位是PDE和PTE都具备的属性,这个属性的含义是表示访问指定的物理页的用户是否为特权用户

U/S = 0 特权用户

U/S = 1 普通用户

练习

修改一个高2G线性地址的PDE/PTE属性,实现Ring3可读.

拆分

0x8003F00C
->
1000 0000 00 *4->800
00 0011 1111 *4->FC
00C

修改该线性地址对应的PDE和PTE的U/S位为1即可,修改如下

PDE的修改如下

PTE的修改如下

结果如下,访问发现报错

查了别人的文章,发现说可能还需要改变下G位,置为0

参考文章:https://blog.csdn.net/qq_18059143/article/details/103285462

再次进行测试,可以成功进行读取了

学习到了这里我们就可以总结两种方法在8086中访问高2G的内存了

第一种是通过门提权来进行0环,然后去读内存,其实就是通过段提高了权限来访问高2G

第二种就是今天学习的就是通过修改PDE和PTE的的U/S位的属性,然后去读内存,其实也就是降低了页的权限来访问高2G(可能有人会问,那段呢?默认数据段就是可以访问对应的RPL为3的段描述符的呀,所以段肯定是可以的!)

总结相关知识点:

1、2G以上是内核才能访问的原因是U/S位的设置问题,如果将内核的某个页设置为1 就可以在R3访问了(理解)

2、0 1 2是系统环 可以访问系统页和用户页。0环是特权级环,1、2环虽然不是特权级环,但是也是系统环,3环是用户环,可以访问用户页(没有真正的理解这个点的意思)

关于PDE和PTE的G位

意思好像就是如果置1的话,那么如果当前的PDE或者PTE被改变,但是不会导致页属性失效,还是保持原来的页属性

PS位

只对PDE有意义,PS == PageSize的意思当PS==1的时候 PDE直接指向物理页 无PTE,低22位是页内偏移。

线性地址只能拆成2段:大小为4MB,俗称"大页"

所以在看PDE的时候,先看P位,再看PS位,如果PS位不是为1,那么就正常4kb的看,如果不是那么就是大页,低22就是业内偏移

练习

分析8043F00C线性地址的PDE属性

拆分

8043F00C
->
1000 0000 01 *4 -> 0x804
00 0011 1111 *4 -> 0xFC
00C

来进行寻找对应的PDE,如下图所示,为0x004009e3

对0x004009e3进行拆分

第低2位为e -> 1110,那么ps位1,所以PDE指向的就直接是物理页了,那么偏移地址为低22位是页内偏移,也就是00 0000 1001 1110 0011 -> 0x9e3

A位

是否被访问(读或者写)过,默认为0,如果访问过则置1,即使只访问一个字节也会导致PDE/PTE的A位置1

D位

D(dirty),个人理解,所以被称呼为脏位

D脏位:是否被写过,默认为0,0没有被写过,1被写过

无效的PTE

老师讲解了当P位为0的时候,也就是PTE无效的时候的多种情形,它的过程为如下:

  • 先检查P位是否有效
    • 如果P位无效,那么就会查询中断描述表中的第E个段描述符,产生异常
      • 再接着操作系统就会根据如下图中去查询PTE的情况
        • 最后根据下面对应的几种处理来进行处理


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM