DPL,RPL,CPL特权级别

 

DPL,RPL,CPL

 

DPL放在段/门描述符中,RPL位于选择子中,CPL即装载选择子的CS的可见部分的CS.RPL

 

数据段:数据段总是一致段,访问数据段需要满足max(RPL,CPL)<=DPL

 

有一个比喻非常形象:

 

总理(CPL=1),想访问市长(DPL=3),可以以省长的名义(RPL=2)进行访问。当然如果以乡长的名义(RPL=4),估计就没有人理他了。

 

JMP,CALL直接跳转 

 

非一致代码段: 起到隔离的作用,需要CPL=DPL,同时RPL<=DPL。并且CS中的特权级字段不会改变,仍为

                   调用者的CPL,这样只能在相同级别的代码段间进行转移。

一致代码段:需要CPL<=DPL,但是CPL会传递下去,不检测RPL。这样只能逐渐向高级别的代码段进行转移。

 

这两种情况CPL都没有改变,都为调用者的CPL。

 

直接跳转不能自由的在各种级别的代码间转移,可以采用调用门的方式

 

访问门的方式和访问数据段的方式一样

需要max(RPL,CPL)<=Gate.DPL

对于CALL:不管是一致代码段或是非一致代码段均有CPL<=DPL

对于JMP: 对于非一致代码段CPL=DPL,一致代码段CPL<=DPL

 

堆栈切换

对于JMP不存在堆栈切换,短JMP对应段内跳转,长JMP对应段间跳转 

对于CALL,若存在特权级变换,则有堆栈切换 

 

存在一个TSS,里面保存了各个特权级的堆栈的ss,esp

当向高的特权级代码段跳转时,需要首先将调用者的堆栈复制到被调用者的堆栈中

 

例如:

调用者堆栈:参数一 参数二 参数三 

被调用者堆栈: 调用者ss,调用者esp,参数一,参数二,参数三,调用者cs,调用者eip

其中调用者ss和调用者esp是根据调用者的特权级DPL在TSS中获得的

 

当返回时,可以根据堆栈中的内容得到正确的调用者的ss和esp。

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值