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

利用段间调用指令CALL实现任务内无特权级变换的转移

楼主#
更多 发布于:2011-08-01 16:48
   在代码段L中,通过段间直接调用指令CALL调用了在代码段C中的两个子程序,这些调用都是无特权级变换的转移。例如,利用如下指令调用了显示字符串子程序DispMsg:  
    CALL16    CodeC_Sel,DispMsg
    其中,CodeC_Sel是代码段C的选择子,DispMsg表示子程序的入口。描述代码段C的描述符在LDT中,描述符特权级DPL是0,所以使用的选择子CodeC_Sel的请求特权级RPL是0,描述符表指示位TI为1。目标代码段C不是一致代码段,所以在CPL=DPL,RPL<=DPL的情况下,顺利进行相同特权级的转移:当前CS和IP压入堆栈,目标代码段的选择子CodeC_Sel被装入CS,对应描述符中的信息被装入高速缓冲寄存器中,16位偏移DispMsg被装入指令指针IP。由于是16位段,所以偏移用16位表示,压入堆栈的是字而不是双字。


喜欢0 评分0
游客

返回顶部