9.[保护模式]代码的跨段跳转流程

  

IRETD 图上错了

 

 

 

段描述符如果是数据段是不允许跳转的!

 

4.权限检查:

    如果非一致代码段,要求CPL == DPL 并且 RPL<=DPL (应用层不能直接访问的)

    如果是一致代码段,要求 :CPL >=DPL;(电脑内核提供可以直接有3环访问的(共享段))

 

5.加载段描述符

    通过上面的检查权限后,CPU会将段描述符加载到CS段寄存器中

 

6.执行代码:

    CPU将CS.base +Offset 的值写入EIP  然后执行CS:EIP处代码,段间跳转结束

 

7.总结:

  对于一致代码段:也就是共享的段

      特权级别高的程序不允许访问特权级别低的数据:核心态不允许访问用户态的数据;

      特权级别低程序可以访问特权级别高的数据,但特权级不会改变(用户态还是用户态);

 

  对于普通代码段(非一致代码段)

      只允许同级访问;

      绝对禁止不同级别的访问:核心态不能访问用户态,用户态不能访问核心态;

直接对代码段进行JMP 或者CALL 的操作,无论目标是一致代码段还是非一致代码段,CPL都不会发生改变,如果要提升CPL的权限,只能通过调用门

转载于:https://www.cnblogs.com/hanhandaren/p/11201216.html

发布了0 篇原创文章 · 获赞 0 · 访问量 801
展开阅读全文
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览