• 8.[保护模式]段权限检查


    1.CPU的分级

     

    2.如何查看程序处于几环?

      CPL:当前特权级

      CS和SS中存储的段选择子后两位

    3.DPL:描述符的特权级别:

      举例说明:MOV DS,AX

      第一步:先判断CS代码段是否有权限执行代码

      第二步:如果有权限执行,那么把AX的值复制给DS (ds=ax),如果ds 原本就等于ax,那么啥也不做

      GDT RPL>=DPL

      赋值成功 刷新缓存

      总结权限 cpl>=dpl&&rpl>=dpl

    代码段的DPL是代码段的,数据段的DPL是数据段的,不是一个DPL

      如果AX指向的段DPL = 0但当前程序的CPL =3 这行指令是不会成功执行的

    4.RPL 请求特权级别

      RPL是针对段选择子而言的,每个段的选择子都有自己的RPL

    举例说明:

    MOV AX,0008  与 MOV AX,000B //段选择子

    MOV DS,AX           MOV DS,AX  //段描述符

    指向是同一个段描述符。但RPL是不一样的。

     

    5.数据段的权限检查

      参考代码如下:

      当程序处于0环,也就是CPL = 0

        MOV AX,000B  //1011   RPL = 3

        MOV DS,AX    //AX指向的段描述符的DPL = 0

      数据段的权限检查:(满足条件指令才能执行成功)

      CPL>=DPL 代码段DPL  MIN(CPL,RPL)>=DPL数据段段DPL 

    注意:代码段和系统段描述符检查方式是不一样的!

    就是在运行一行代码时候,首先要检查CS 段,如果cs 段段CPL和DPL一样都是3,而在你AX索引段段内段DPL是0的话,那么,访问失败!

    6.总结:

      CPL CPU当前的权限级别

      DPL 如果你想访问我,你应该具备什么样的权限

      RPL 用什么权限去访问一个段

    为啥要有RPL?

      我们本来可以用”读写“权限打开一个文件,但为了避免出错,我们只用”只读“的权限去打开!

  • 相关阅读:
    JVM垃圾回收机制
    浅谈类的几个基础构造函数
    三次登陆用户名 和密码
    干迷宫
    记录人生中的第一个bug
    js三元运算符? :
    Linux云服务器 磁盘分区失败
    python基础中遇到的问题(TypeError: unhashable type: 'list')
    python亲密数设计
    源码编译安装Protobuf
  • 原文地址:https://www.cnblogs.com/hanhandaren/p/11200941.html
Copyright © 2020-2023  润新知