保护模式下的特权级转换总结

1 首先要说明的是 “一致代码段和非一致代码段” 的概念。

“一致”的意思是这样的:

  • 当转移的目标是一个特权级更高的一致代码段(CPL<=DPL,RPL<=DPL(级别的高低,不是数字的大小)),当前的特权级会被延续下去,CPL不变。
  • 而向特权级更高的非一致代码段的转移会引起常规保护错误。

说明:

  • 代码段是否为一致代码段的属性是在规定GDT表的Descriptor的属性选项规定的。
  • 数据段都是非一致的。

利用call和jmp总结:

  • 向非一致代码段访问,只能访问同一特权级别的,要真想访问其他级别的,使用调用门和retd。
  • 向一致代码段访问,只能Low->High  or Same Privilege,High->Low是引起常规保护错误的。
  • 向数据段访问,High->Low or Same Privilege,Low->High是引起常规保护错误。

 

2 DPL表示或者门的特权级,被存储在段描述符或者门描述符的DPL字段中。

数据段、调用门、TSS
  DPL规定了可以访问此段的最低特权级。即特权级>=DPL才能访问成功。

通过调用门访问的非一致代码段
  DPL规定了可以访问此段的最高特权级。即特权级<=DPL才能访问成功。

  • 解释:比如想通过调用门从低级别向高级别访问,不妨设低级别为代码A,高级别为代码B,调用门G。会有2次特权级的判定,先是特权级>=DPL_G.然后如果第一条成立,说明刚刚能接触调用门,至于调转成功否还未知。还要DPL_B>=特权级,才能够实现跳转的成功。

 

3 CPL(Current Privilege Level)是当前执行的程序或任务的特权级。它被存储在cs和ss的第0位和第1位上。个人认为可以看成是段描述符未加载入CS前,该段的DPL,加载入CS后就存入CS的低两位,所以叫做CPL,其值就等于原段DPL的值。特例一致代码段访问除外

4 RPL(Requested Privilege Level)是存储在段选择子的第0位和第1位中的。

段2中红字标出的特权级意思是:min(CPL, RPL).

 

 

 

 



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值