调用后返回

转自:点击打开链接


当目标代码执行完毕,需要返回控制权给原代码时,将产生返回控制权行为。返回控制权行为,比转移控制权行为简单得多。因为,一切条件已经在交出控制权之前准备完毕,返回时仅需出栈就行了。

 

1、 near call的返回

近调用情况下,段不改变,即 CS 不改变,权限级别不改变。从栈中pop返回地址到 EIP 寄存器时,需进行 limit 的检查。

 

2、 直接控制权转移的返回(far callfar jmp

直接转移返回到相同权限级别,发生跨段的返回,权限不变。这时,CS 被从栈中 pop 出来的 CS 值加载进去,处理器会检查 CPL 与这个 pop 出来的选择子(calling procedure CS)中的RPL进行检查,相等则属相级返回。

 

3、 利用各种门符进行向高权限代码转移后的返回

★    检查保存在 called procedure stack中的原calling procedure CSRPL域以确保是从高权限向低权限代码返回。

★    原 calling procedure CSEIP pop CS EIP 寄存器中。

★    若有参数时,called procedureESP需恢复栈结构(加上相应参数 size

★    原 calling procedure SS ESP pop SS ESP寄存器中。

★    若有参数时,原 calling procedure ESP 需恢复结构(加上相应参数 size)。

★    恢复原 calling procedureCS后,将检查每个 segment selectorDSESFSGS),假如数据段权限高于CS,则被加载null segment selector

 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值