段权限检查

  1. 段权限检查

DPL 是段的权限属性,要想访问一个数据段,段选择子和CPU当前权限必须高于DPL。

DPL:段的权限

RPL:段选择子的权限

CPL:CPU的权限,当前特权级

  1. CPL

CPL(Current Privilege Level) :当前特权级     

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

3.DPL (Descriptor Privilege Level ) 描述符特权级别

DPL存储在段描述符中,规定了访问该段所需要的特权级别是什么。

通俗理解 :如果你想访问我,那么你应该具备什么特权。

举例说明:

Mov DS ,AX

如果AX 指向的段DPL= 0,当当前程序的CPL=3,这条指令会失败。

 

4.RPL (Request Privilege Level) 请求特权级别

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  并且 RPL <= DPL (数值上的比较)

当CPL =3,只能加载DPL=3的数据段。

当CPL=0,当RPL<= DPL的数据段都可以加载。

 

6. 练习

 

描述这下面代码的执行过程:

mov ax,0x23

mov ds,ax

段选择子是0x0023,RPL=11b=3,属于最低权限,只能访问DPL=3的数据段。而CPL则无影响,不管是0环还是3环,都满足CPL<=RPL,只要RPL满足,CPL也一定满足。

 

当执行 mov ds,ax 时,CPU先解析段选择子0023,然后去GDT表找段描述符,检查段描述符P位是否有效,然后检查S位,确认是数据段或代码段,然后检查TYPE域确认是数据段,然后看DPL是否等于3.只要上述条件都满足,则mov指令执行成功,只要有一条不满足,mov失败。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值