RET RETF IRET IRETD 指令的不同
文章目录
- RET
- RETF (return far)
- IRET (interrupt return)
- IRETD
- 参考书籍
操作系统:32位,保护模式,非影子堆栈(Shadow-Stack)
填一下之前挖的坑
以下个人理解并不保证完全正确,请使用intel白皮书进行对照阅读
如有错误,还请指正
RET
机器指令:C3
近返回,一般函数调用的返回,call
对应 ret
,也是唯一的用途
RET
的本质是:从栈顶弹出 EIP (pop EIP),EIP是返回地注意:pop EIP没有这条指令,只是方便理解
如果是 RET n
这样的,那么之后还会 ESP + n (后面这种形式就不写了)
RETF (return far)
机器指令:CB
远返回,call far
对应的 retf
,当然分为两种情况
- 相同权限返回:从栈顶弹出 EIP >> CS (先 >> 后)
- 不同权限返回:从栈顶弹出 EIP >> CS >> ESP >> SS
权限是否相同指的是:当前段的特权级别和将要返回的段的特权权限是否相同(CPL和DPL是否相同)
tip:不同权限之间的跳转都是要进行权限检查和各种保护检查
IRET (interrupt return)
机器指令:CF66
中断返回,int n
对应 iret
;任务切换(nested task swith)的 call far
也用 iret
返回
- 这里会用到一个NT位 (在EFLAGS寄存器中),这个表示是否是嵌套的任务切换 (是否是call命令的任务切换)。这将会影响到返回的方式。
- NT = 0,从栈顶弹出 EIP >> CS >> EFLAGS >> ESP >> SS (类似于RETF)
- NT = 1,任务切换返回,使用到TSS表。详情请查看任务段调用及返回
IRETD
机器指令:CF
中断返回,同iret
- 32位下,IRETD和IRET至少执行结果是一样的,但是硬编码却略有不同
- 本来是专门为32位定制的,但是编译器却允许IRET有32位和16位两种返回方式。
(32位下,IRET 等价于 IRETD,且 IRET 比 IRETD 更常用)
书中原文:
IRET and IRETD are mnemonics for the same opcode. The IRETD mnemonic (interrupt return double) is intendedfor use when returning from an interrupt when using the 32-bit operand size; however, most assemblers use theIRET mnemonic interchangeably for both operand sizes.
参考书籍
参考 : (可以参考书中的代码)
英特尔2卷 Vol. 2A 3-525 //IRET IRETD
英特尔2卷 Vol. 2B 4-563 //RET RETF
这里只是简单描述一些比较重要的内容,更多详情请参看上面的书页
RET RETF IRET IRETD 指令的不同相关推荐
- 汇编ret ,retf ,iret ,int指令详解
** ret指令 ** 执行过程 ret指令用栈中的数据,修改IP的值,从而实现近转移. CPU执行ret指令时,进行下面两步操作: (IP)=((SS)*16+(SP)) (SP)=(SP)+2; ...
- ret/retf/iret
ret/retf/iret (2011-03-10 23:10:27) http://blog.sina.com.cn/s/blog_67146a750100ra3l.html 转载▼ 标签: ret ...
- ret,retf,iret等的区别
RET, and its exact synonym RETN, pop IP or EIP from the stack and transfer control to the new addres ...
- [汇编语言]-第十章 ret,retf,call指令
1- ret 相当于 pop IP;用栈中数据,修改IP内容.从而实现近转移. 执行后(IP)=0, CS:IP指向代码段的第一条指令. 1 assume cs:code 2 stack segmen ...
- 高特权级代码段转向低特权级代码段(利用 ret(retf) 指令实现 jmp from ring0 to ring3)
[0]写在前面 0.1)本代码旨在演示 从 ring0 转移到 ring3(即,从高特权级 转移到 低特权级) 0.2)本文 只对 与 门相关的 代码进行简要注释,言简意赅: 0.3)文末的个人总结是 ...
- Win-MASM64汇编语言-CALL/RET/RETF指令
CALL和RET都是转移指令,它们都会修改IP,或者同时修改CS和IP,两个指令配合使用用来实现子程序 一:RET与RETF RET 将栈中的数据,放到IP中,从而实现修改IP,达到近转移 RETF ...
- 8086CPU中指令RET与IRET区别
ret 是普通的子程序的返回指令. 也可以叫做近返回,即段内返回.处理器从堆栈中弹出IP或者EIP,然后根据当前的CS:IP跳转到新的执行地址.如果之前压栈的还有其余的参数,则这些参数也会被弹出. i ...
- call和ret(f)指令
call指令 CPU执行call指令时,进行两步操作 将当前的ip(eip)或者cs和ip(ecs和eip)压入栈中 跳转到标号处 call 标号 将当前的IP压栈后,转到标号处执行指令 相当于: p ...
- 汇编语言(王爽 第三版) ret retf总结 以及检测点10.1
关键导读: ret对应的代码以及结果: assume cs:codesgstack segmentdb 16 dup(0) stack endscodesg segmentmov ax,4c00hin ...
最新文章
- 解决通过QQ客户端的空间邮箱等打开空间邮箱
- 学习旧岛小程序 (5) observer 函数中修改属性的值
- java连接ibm mq
- Centos编译安装Apache 2.4.6笔记 配置
- BZOJ3527: [Zjoi2014]力 [FFT]
- webapi get请求 FromUri list参数传递
- 元素(块、行内、行内块
- Dailymotion 视频下载神器,喜欢太阳的后裔的人有福了!
- mysql 集群怎么卸载节点_Redis集群重新分片(新增/移除节点)【理论】
- C++11多线程创建的三种方法
- python分割压缩_Python读取分割压缩TXT文本文件实例
- POJ 1979 红与黑
- 中国移动:2016年全力推NFC,以公共交通为突破口
- struts的工作原理
- 分解得到的时频域特征_AI大语音(四)| MFCC特征提取(深度解析)
- android 标题名字,说说 Android 的 Material Design 设计(五)——可折叠式标题栏
- Windows 2003声卡驱动的安装.
- 布同:如何循序渐进学习Python语言(转载)
- 在英特尔独立显卡上训练TensorFlow模型
- MySQL数据库机器配置的3个网络参数
热门文章
- 2k19徽章修改_您可以修改此会议徽章
- word2vec 中的数学原理详解(三)背景知识
- 如何用织梦仿制php网站首页,DEDE织梦网站首页(排名)仿制实战操作
- 微生物组-宏基因组分析(线上/线下同时开课,2021.11)
- css中脱离标准流的三种方式,CSS——脱离标准流方法一:浮动
- PHP软件工程近三年的文献,软件工程论文参考文献
- 机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾
- 计算机系统组装音乐制作型,电脑音乐制作系统、设备购买方案
- IOS性能检测工具-Instruments
- linux怎么新建html文件,HTML 编辑器