关于CPL、DPL、RPL(3)

关于CPL、DPL、RPL

这几个概念刚开始是有点难理解的,因为各种情况都有,有点复杂。我觉得最简单的办法就是,把程序的各种段,理解为国家的各种政府机构,例如省级机构、市级机构、县级机构等,DPL就是用来标识这个的,这是个静态的概念,省级的机构办省级的事,市级的机构办市级的事,设置好了各自的职权范围。而执行程序,可以理解为去这些机构办事,CPL就是你当前的身份。而RPL呢,可以理解为,你去办事的时候,希望以什么样的身份去办事。

这里还涉及一个概念:一致代码段和非一致代码段。这两个概念有点拗口难理解,“一致”与“非一致”有点类似政府的办事机构的不同性质,“非一致”的机构,就是那种吃饭不干事的,老百姓想来办事,直接撵出去,鸟都不鸟你。“一致”的机构,把老百姓当做自己家人,踏实为老百姓办事的机构。
·
下面说下办事的潜规则:
1.“非一致”的办事机构,整天吃饭不干事,除非你就是这机构里的人员,其它人这个机构鸟都不鸟。
2.“一致”的办事机构,你能进去办事,但是进去后,你的老百姓身份并不会改变,只能办老百姓的事,并不能说我一个普通老百姓,进去后要去管理这机构里面的人。

CPL是当前执行的代码的特权级,存储在CS和SS的第0、1位上。也就是说,特权级这里只有四种,0,1,2,3。
DPL是段的特权级,可以是数据段、堆栈段或者代码段,这个很好理解,是个静态的概念,这个DPL是在GDT创建段的时候,可以作为段的属性进 行设置。

一致代码段和非一致代码段,这个属性也是在GDT创建段的时候设置的。假如从A代码段要进入B代码段,1.如果B是非一致代码段,则要求执行A时的CPL=B的DPL。(同时要求RPL<= DPL)2.如果B是一致代码段,则执行A时的CPL>=B的DPL(RPL不检查),进入B时,A的CPL会延续下来。

从上面总结下:使用jmp、call进行普通跳转时,
1. 如果目标是非一致代码段,只能在相同特权级的代码间转移;
2. 如果目标是一致代码段,则最多只能从特权级低的代码转移到高的代码,但是CPL不会改变。

从上面的第二点看,是不是有点失望,虽然能从低特权级转到高特权级上去,但是你的身份还是没有改变,就好比你去政府机构求人家办事,你依然是个屌丝身份并没有改变,咋办呢,下面要提到的“调用门”就提供了这样的机会,使用“调用门”,就好比考公务员,你有机会进去政府机构办事,而且跟他们平起平坐。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值