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) 编辑 收藏 举报