鱼C论坛

 找回密码
 立即注册
查看: 2503|回复: 6

[技术交流] jmp、call、ret、retf解析

[复制链接]
发表于 2013-4-10 19:13:30 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
JMP、CALL和RET指令的近转移形式只是在当前代码段中执行程序控制转移,因此不会执行特权级检查。JMP、CALL或RET指令的远转移形式会把控制转移到另外一个代码段中,因此处理器一定会执行特权级检查。


1、jmp指令紧紧进行执行流程的跳转,不会保存返回地址


2、call指令在进行流程跳转前会保存返回地址,以便在跳转目标代码中可以使用ret指令返回到call指令的下一条指令处继续执行。执行段内跳转时,只保存EIP;如果是段间跳转,还保存CS。


3、ret和retf:这两个指令的功能都是调用返回。

        (1)ret在返回时只从堆栈中取得EIP;retf中的字母f表示far,即段间转移返回,要从堆栈中取出EIP和CS。

        (2)两个指令都可以带参数,表示发生过程调用时参数的个数,返回时要从堆栈中退出相应个数的参数。

        (3)恢复CS时,如果发现将 发生特权级变化(当前CS的低2位不等于从堆栈中取得的新的CS值的低2位。由跳转的相关理论可知,只有跳转到非一致代码段时才会发生特权级变化,那么, 也只有从非一致代码段返回时才会发生特权级变化的返回),则还要从调用者堆栈中取得ESP和SS恢复到相应寄存器中,也即恢复调用者堆栈。


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-13 14:34:30 | 显示全部楼层
感谢分享,辛苦了{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-13 17:23:40 | 显示全部楼层
我是VIP,我骄傲!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-4-13 18:02:35 | 显示全部楼层
感恩无私的分享与奉献 :)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-12-3 19:12:04 | 显示全部楼层
谢谢楼主,基本看懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-3 19:49:18 | 显示全部楼层
感谢分享心得!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-12-4 20:10:38 | 显示全部楼层
感谢楼主辛苦了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-28 15:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表