文章目录

  • 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

权限是否相同指的是:当前段的特权级别将要返回的段的特权权限是否相同(CPLDPL是否相同)

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 指令的不同相关推荐

  1. 汇编ret ,retf ,iret ,int指令详解

    ** ret指令 ** 执行过程 ret指令用栈中的数据,修改IP的值,从而实现近转移. CPU执行ret指令时,进行下面两步操作: (IP)=((SS)*16+(SP)) (SP)=(SP)+2; ...

  2. ret/retf/iret

    ret/retf/iret (2011-03-10 23:10:27) http://blog.sina.com.cn/s/blog_67146a750100ra3l.html 转载▼ 标签: ret ...

  3. ret,retf,iret等的区别

    RET, and its exact synonym RETN, pop IP or EIP from the stack and transfer control to the new addres ...

  4. [汇编语言]-第十章 ret,retf,call指令

    1- ret 相当于 pop IP;用栈中数据,修改IP内容.从而实现近转移. 执行后(IP)=0, CS:IP指向代码段的第一条指令. 1 assume cs:code 2 stack segmen ...

  5. 高特权级代码段转向低特权级代码段(利用 ret(retf) 指令实现 jmp from ring0 to ring3)

    [0]写在前面 0.1)本代码旨在演示 从 ring0 转移到 ring3(即,从高特权级 转移到 低特权级) 0.2)本文 只对 与 门相关的 代码进行简要注释,言简意赅: 0.3)文末的个人总结是 ...

  6. Win-MASM64汇编语言-CALL/RET/RETF指令

    CALL和RET都是转移指令,它们都会修改IP,或者同时修改CS和IP,两个指令配合使用用来实现子程序 一:RET与RETF RET 将栈中的数据,放到IP中,从而实现修改IP,达到近转移 RETF ...

  7. 8086CPU中指令RET与IRET区别

    ret 是普通的子程序的返回指令. 也可以叫做近返回,即段内返回.处理器从堆栈中弹出IP或者EIP,然后根据当前的CS:IP跳转到新的执行地址.如果之前压栈的还有其余的参数,则这些参数也会被弹出. i ...

  8. call和ret(f)指令

    call指令 CPU执行call指令时,进行两步操作 将当前的ip(eip)或者cs和ip(ecs和eip)压入栈中 跳转到标号处 call 标号 将当前的IP压栈后,转到标号处执行指令 相当于: p ...

  9. 汇编语言(王爽 第三版) ret retf总结 以及检测点10.1

    关键导读: ret对应的代码以及结果: assume cs:codesgstack segmentdb 16 dup(0) stack endscodesg segmentmov ax,4c00hin ...

最新文章

  1. 解决通过QQ客户端的空间邮箱等打开空间邮箱
  2. 学习旧岛小程序 (5) observer 函数中修改属性的值
  3. java连接ibm mq
  4. Centos编译安装Apache 2.4.6笔记 配置
  5. BZOJ3527: [Zjoi2014]力 [FFT]
  6. webapi get请求 FromUri list参数传递
  7. 元素(块、行内、行内块
  8. Dailymotion 视频下载神器,喜欢太阳的后裔的人有福了!
  9. mysql 集群怎么卸载节点_Redis集群重新分片(新增/移除节点)【理论】
  10. C++11多线程创建的三种方法
  11. python分割压缩_Python读取分割压缩TXT文本文件实例
  12. POJ 1979 红与黑
  13. 中国移动:2016年全力推NFC,以公共交通为突破口
  14. struts的工作原理
  15. 分解得到的时频域特征_AI大语音(四)| MFCC特征提取(深度解析)
  16. android 标题名字,说说 Android 的 Material Design 设计(五)——可折叠式标题栏
  17. Windows 2003声卡驱动的安装.
  18. 布同:如何循序渐进学习Python语言(转载)
  19. 在英特尔独立显卡上训练TensorFlow模型
  20. MySQL数据库机器配置的3个网络参数

热门文章

  1. 2k19徽章修改_您可以修改此会议徽章
  2. word2vec 中的数学原理详解(三)背景知识
  3. 如何用织梦仿制php网站首页,DEDE织梦网站首页(排名)仿制实战操作
  4. 微生物组-宏基因组分析(线上/线下同时开课,2021.11)
  5. css中脱离标准流的三种方式,CSS——脱离标准流方法一:浮动
  6. PHP软件工程近三年的文献,软件工程论文参考文献
  7. 机器学习系列(3)_逻辑回归应用之Kaggle泰坦尼克之灾
  8. 计算机系统组装音乐制作型,电脑音乐制作系统、设备购买方案
  9. IOS性能检测工具-Instruments
  10. linux怎么新建html文件,HTML 编辑器