注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

路雷米的博客

人生最难的就是在热爱和生计之间做选择, 愿每个人这一生 既对得起梦想又担得责任

 
 
 

日志

 
 

x86基础:RPL/CPL/DPL简述  

2016-01-23 16:10:04|  分类: X86知识 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

[http://blog.csdn.net/huangkangying/article/details/44966585]

基本概念

RPL: Requested Privilege Level, 请求特权级
DPL: Descriptor Privilege Level,描述符特权级
CPL: Current Privilege Level,当前特权级

区分RPL和CPL

可能有很多博客或者文章上面都有讲到RPL和CPL,那么这两者到底有什么区别和联系呢:
1. RPL存在于段选择子(Segment Selector)中,CPL存在于段寄存器中,如(CS, SS, DS)
2. RPLCPL都占用2个bit, 取值范围0~3, 值越小,特权级越高
但是问题又出现了,段选择子与段寄存器之间又有什么关系呢?
看下面的代码,你可能就比较清楚了:

lgdt gdtdesc
movl %cr0, %eax
orl $CR0_PE_ON, %eax
movl %eax, %cr0
ljmp $PROT_MODE_CSEC, $protcseg

 

 

 

 

 

上面的这一段代码的主要作用是从实模式切换到保护模式,其中$PROT_MODE_CSEC就是段选择子
ljmp在跳转时会把段选择子赋值给段寄存器。这样,你应该清楚它们之间是什么关系了吧。

 

RPL, CPL与DPL实现数据段保护

DPL存在于段描述符(Segment Descriptor)中,代表着要访问当前数据或者是代码段所需要的特权等级
CPL是当前代码的特权级,RPL是你请求的特权级,简单的说,只有当max(RPL, CPL) <= DPL时,访问才能成功.
例如:

DPL = 2, CPL = 0, RPL = 3, 访问失败
虽然当前所有的特权级CPL很高,但RPL很低,就像你是level 1的,你偏要告诉别人你是level 3的,那当然没人买你的帐。

另外简单说段选择子的结构:

Bit 0 ~ Bit 1:  RPL
Bit 2:          TI(Table indicator), 0-GDT, 1-LDT
Bit 3 ~ Bit15:  Index of table
  评论这张
 
阅读(119)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018