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的权限,只能通过调用门

posted @ 2019-07-17 15:18  瀚瀚大人  阅读(311)  评论(0编辑  收藏  举报