532628838
圣骑士
圣骑士
  • 注册日期2011-06-10
  • 发帖数98
  • QQ
  • 火币517枚
  • 粉丝77
  • 关注39
阅读:2931回复:0

向目标代码段转移的步骤

楼主#
更多 发布于:2011-08-01 16:52
 处理器在执行上述段间转移指令向目标代码段实施转移的过程中,一般至少要经过如下步骤:  
(1)判断目标地址指针内的选择子指示的描述符是否为空描述符。空描述符是GDT中的第0个描述符,是一个特殊的描述符。目标代码段描述符不能为空描述符,也即选择子的高14位不能为0。  
(2)从全局或局部描述符表内读出目标代码段描述符。由选择子内的TI位,确定使用全局描述符表还是局部描述符表。  
(3)根据情况,检测描述符类型是否正确;调整RPL。  
(4)把目标代码段描述符内的有关内容装载到CS高速缓冲寄存器。  
(5)判断目标地址指针内的偏移是否越出代码段的界限。目标地址指针内的偏移必须不超过目标代码段界限。  
(6)装载CS段寄存器和指令指针寄存器EIP;CPL存入CS内选择子的RPL字段。  
    上述步骤只是对转移过程的简单说明,实际的动作还要复杂。在把目标代码段描述符内的有关内容转载到CS高速缓冲寄存器时,还要进行如下保护检测,其中的DPL表示目标代码段描述符的特权级:  
(1)对于非一致代码段,要求CPL=DPL,RPL<=DPL;对于一致代码段,要求CPL>=DPL。  
(2)代码段必须存在,即描述符中的P位必须是1。  
    通常描述符特权级DPL规定了对应段的特权级。如果描述符描述的是数据段,那么DPL就规定了访问该数据段的最外层特权级;如果描述符描述的是代码段,那么DPL就规定了执行该代码段所需要的CPL。但从上述装载CS高速缓冲寄存器时进行的保护检测可见,对于一致代码段,却要求CPL>=DPL,也就是说,一致代码段描述符中的DPL规定了可以转移到一致代码段的最内层特权级。于是,3级的程序可以转移到任何一致的代码段,而0级的程序只允许转移到DPL等于0的一致代码段。一致代码段描述符内DPL的这种解释,正好与正常的DPL的解释相反。  
    一致的可执行段是一种特别的段。这种存储段,为在多个特权级执行的程序,提供对子例程的共享支持,而不要求改变特权级。例如,通过把数值库例程放在一致的代码段中,可以使不同级执行的程序共享数值库例程。这样,任何特权级的程序可以使用段间调用指令,调用库中的例程,并在调用者所具有的特权级执行该例程。

喜欢0 评分0
游客

返回顶部