cpl dpl rpl问题高手指教!
把选择子装入数据段寄存器和堆栈段寄存器时要进行的检测。
在把选择子装入数据段寄存器DS、ES、FS或GS时,要进行如下检测:
(1)选择子不能为空;
(2)选择子指定的描述符必须是数据段描述符、可读可执行的代码段或一致可读的可执行代码段的描述符;
(3)对于数据段和可读可执行代码段,要求CPL <=DPL,RPL <=DPL;-------------------------------------------为什么要CPL <=DPL,RPL <=DPL这样?有什么好处,要是不这样会发生什么情况?
(4)对应的段必须存在。
========================================================================
在把目标代码段描述符内的有关内容转载到CS高速缓冲寄存器时,还要进行如下保护检测,其中的DPL表示目标代码段描述符的特权级:
(1)对于非一致代码段,要求CPL=DPL,RPL <=DPL;对于一致代码段,要求CPL> =DPL。--------------为什么CPL=DPL而RPL <=DPL呢?rpl不是根据当前的cpl确定的权限吗?rpl怎么可能比cpl大呢?那样不是出错了吗?
(2)代码段必须存在,即描述符中的P位必须是1。
[解决办法]
看我相关的解答:
http://community.csdn.net/Expert/topic/5609/5609515.xml?temp=.7241022