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