数据段的特权级检查 :
当访问数据段中的操作数的时候,需要把数据段的段选择符加载进段寄存器,比如DS ,SS ,ES ,FS ,GS 。处理器需要进行特权级检查:
DPL>=
RPL
并且
DPL>=
CPL
,CPL 取max( CPL, RPL)
当访问堆栈段时,应满足:
DPL = CPL = RPL ,CPL 不改变
代码段之间进行跳转的特权级检查 :
对于非一致性代码段的检查,应该满足:
CPL = DPL 并且
RPL<=
CPL
,跳转后,CPL 不改变。
对于一致性代码段的检查,应该满足:
CPL>=
DPL
,跳转后,CPL 不改变。
通过调用门访问代码段 :
首先调用门的
RPL<=
调用门的DPL ,并且
CPL<=
调用门的DPL
再次对CPL 和代码段描述符的DPL 进行检测:
CALL 指令:通过调用门可以把程序控制转移到更高的非一致代码段和一致代码段中去。
JMP 指令:通过调用门可以把程序控制转移到更高的一致代码段中去。
如果程序控制权被转移到非一致代码段中去CPL 被置为DPL 的值,如果转移到一致代码段中去CPL 的值不变。
调用门可以让同一个代码段中的过程被不同特权级的过程访问,只要为过程入口设置一个调用门即可。
当访问数据段中的操作数的时候,需要把数据段的段选择符加载进段寄存器,比如DS
DPL>=
当访问堆栈段时,应满足:
DPL = CPL = RPL
代码段之间进行跳转的特权级检查
对于非一致性代码段的检查,应该满足:
CPL = DPL
对于一致性代码段的检查,应该满足:
CPL>=
通过调用门访问代码段
首先调用门的
再次对CPL
CALL
JMP
如果程序控制权被转移到非一致代码段中去CPL
调用门可以让同一个代码段中的过程被不同特权级的过程访问,只要为过程入口设置一个调用门即可。