ret向外层返回

  1,ret指令先从堆栈弹出返回地址指针(48位的selector:offset)

        若selector的RPL等于当前的CPL,则直接开始向目标代码段转移的步骤,即执行jmp selector:offset

        若selector的RPL大于当前的CPL,则引起向外层返回。CPL的变化也必然对应着堆栈切换。

  2,内层堆栈弹掉先前堆栈切换时复制进来的参数,再弹出指向外层堆栈的指针并载入ss:esp,至此,堆栈切换到外层堆栈。

  3,外层堆栈弹掉先前压入的参数。

  4,检查数据段寄存器ds,es,fs,gs,以保证各自对应的段在外层cpl等级下仍是可访问,若不可访问,则装入空选择子避免保护空洞。


posted on 2012-09-01 21:41  weiweishuo  阅读(207)  评论(0编辑  收藏  举报

导航