pmtest5.asm

CPL current privilege level

  • 存储在cs 和 ss的第0位和第1位上
  • CPL通常等于当前所在段的特权级,除非当前所在段是一致代码段
  • 所以程序在不同特权级的代码之间切换时CPL也随之变化
  • 一致代码段:
    • 可以被相同或更低特权级的代码访问。
    • 访问的一致代码段特权级特权级与CPL不相同时,CPL不会改变。

DPL descriptor privilege level

  • 表示段、门的特权级
  • 存储在段描述符、门描述符的DPL字段中
  • 当想访问某段或门时 DPL和CPL比较 或DPL与门选择子的RPL比较 符合要求方可访问
  • 对不同的段、门DPL的含义不同:
    • 数据段:该段的DPL规定了访问此段的最低特权级,即要求DPL>=CPL。例如若DPL=1 则CPL必须<=1才可以访问
    • 非一致代码段(不使用调用门访问之) :访问时CPL与RPL必须等于该段的DPL 同时RPL<=DPL
    • 调用门、TSS:DPL的含义与数据段的DPL含义一致
    • 非一致代码段(使用调用门访问)、一致代码段:要求DPL<=CPL。例如若DPL=2 则CPL为0、1的不可以访问

RPL requested privilege level

  • 存储在段选择子的第0和1位
  • 转移目标为一致代码段(不使用调用门访问之):RPL不做检查
  • 转移目标为非一致代码段(不使用调用门访问之):RPL<=DPL
    在这里插入图片描述

在这里插入图片描述
引入门的原因:不使用门不能进行不同特权级的转移:

  • 非一致代码只能在相同特权级转移 ,一致代码段虽然能从低特权级到高特权级代码段转移但是CPL不会变化。
  • 引入调用门后可以实现低特权级到高特权的转移 无论代码段是一致的还是非一致的

pmtest5a.asm的主要结构和pmtest2还是很像的,一下是一些比较难理解的代码的解释

  • 在这里插入图片描述
    这里selectorstack3指向的就是ss topofstack3就是esp 意思是我们转移去ring3它的那个堆栈去 然后cs:ip是268和269行处压入栈中,意思是去ring3代码段的开头。因为pmtest5.asm中的ret指令好像都是不会去返回参数的,所以并没有去压入参数,如果有参数的话是要在压入ss\esp之后,压入cs\eip之前压入参数好像,书中50页以后那几页关于堆栈变化的图是这样描述的emmm,书讲的很清楚没有啥需要特别理解的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值