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?

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

转载于:https://www.cnblogs.com/hanhandaren/p/11200941.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值