跳转指令 jmp、call、ret、retf
来源:互联网 发布:手机软件 知乎 编辑:程序博客网 时间:2024/05/16 15:27
保存一下,方便以后查看。
作者:chuanwang66
原作网址:http://chuanwang66.iteye.com/blog/1075859
JMP、CALL和RET指令的近转移形式只是在当前代码段中执行程序控制转移,因此不会执行特权级检查。JMP、CALL或RET指令的远转移形式会把控制转移到另外一个代码段中,因此处理器一定会执行特权级检查。
1、jmp指令:不影响堆栈。紧紧进行执行流程的跳转,不会保存返回地址。(书P55)对于jmp而言,长短jmp仅仅是结果不同罢了,短跳转对应段内,长跳转对应段间。
2、call指令:影响堆栈。在进行流程跳转前会保存返回地址(下一条指令的地址),以便在跳转目标代码中可以使用ret指令返回到call指令的下一条指令处继续执行。执行段内跳转(或称“长call”)时,只保存EIP;如果是段间跳转(或称“短call”),还保存CS。
3、ret和retf:这两个指令的功能都是调用返回。
(1)ret在返回时只从堆栈中取得EIP;retf中的字母f表示far,即段间转移返回,要从堆栈中取出EIP和CS。
(2)两个指令都可以带参数,表示发生过程调用时参数的个数,返回时要从堆栈中退出相应个数的参数。
(3)恢复CS时,如果发现将发生特权级变化(当前CS的低2位不等于从堆栈中取得的新的CS值的低2位。由跳转的相关理论可知,只有跳转到非一致代码段时才会发生特权级变化,那么,也只有从非一致代码段返回时才会发生特权级变化的返回),则还要从调用者堆栈中取得ESP和SS恢复到相应寄存器中,也即恢复调用者堆栈。
0 0
- 跳转指令 jmp、call、ret、retf
- jmp、call、ret、retf解析
- 【汇编】jmp、call、ret、retf比较
- call、ret、retf 指令详解
- 汇编语言 JMP CALL RET RETF的使用与区别
- 汇编指令jmp call ret 变形
- ret和retf指令
- 汇编,ret retf iret指令
- 转移指令jmp和跳转指令call
- 不同特权级间代码段的跳转{ 门 + 跳转(jmp + call) + 返回(ret) }
- CALL和RET指令
- call和ret指令
- call 和 ret 指令
- CALL和RET指令
- 高特权级代码段转向低特权级代码段(利用 ret(retf) 指令实现 jmp from ring0 to ring3)
- Call指令与ret指令
- Call指令与ret指令
- call指令和ret指令
- 集合类(二):泛型
- 将博客搬至CSDN
- XML(一):基础
- XML(二):约束模式
- 心灵之窗-视觉研究的进展、应用与意义
- 跳转指令 jmp、call、ret、retf
- libevent源码分析--event_add()函数
- android browser 的几个小feature (三) wtai类型url的处理
- 关于泛型的一个小知识
- 《天下无贼》现实版:盗窃团伙开豪车跨省作案
- 第一章 概述 1.12标准的简单服务
- 我和CPU之间关于EFLAGS的对话
- MFC中CString.Format的详细用法
- svn服务器搭建和客户端使用