社区
汇编语言
帖子详情
ret和retf通俗的解释下
codefish123
2011-05-23 08:48:37
它门是怎么执行的 最好有示例
...全文
1436
5
打赏
收藏
ret和retf通俗的解释下
它门是怎么执行的 最好有示例
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
wfq0987
2011-05-25
打赏
举报
回复
ret返回时pop ip
retf返回时pop cs,pop ip
大熊猫侯佩
2011-05-25
打赏
举报
回复
一个近返回,一个带段地址返回。后者在win32编程中很少用到。
xiaopoy
2011-05-24
打赏
举报
回复
ret代表函数return。
retf代表函数return with flag。这儿的flag可以用感觉理解成EFLAG,虽然retf不会真的恢复EFLAG,但它要恢复CPU的执行环境。
因为在32bit保护模式里return with flag的切换段寄存器直接意味着代码的执行权限的改变,于是retf在保护模式里就经常用在系统软件中断调用的返回时,用来切换执行到非特权级别执行权限,当然中断的处理例程里因为中断例程是特权级别执行权限,返回时也需要用retf来切换堆栈。
至于rtn和rtnf怎么返回,就记住rtn只返回一个EIP,rtnf先返回CS,又返回EIP就可以了。具体的堆栈怎么操作,视CPU架构而定, 现在的PC CPU架构中, intel的Protected mode/Real-address mode /System management mode (SMM)/Compatibility mode (sub-mode of IA-32e mode)是按照32-bit来操作堆栈的, 64-bit mode (sub-mode of IA-32e mode)是按照64bit操作堆栈的。
4号机器人
2011-05-23
打赏
举报
回复
ret 是32位地址的返回或16位选择子加32位地址的返回(由编译器分辨是翻译成retn还是retf)
retn 是32位地址的返回(NEAR)
retf 是16位选择子加32位地址的返回(FAR)
RET指令把程序的控制点返回到子程序的调用者。通过把保存在堆栈中的返回地址弹出到相应寄存器中实现子程序调用的返回,并从返回地址处继续执行。段内(NEAR)调用返回把32位返回地址弹出到EIP寄存器中;段间(FAR)调用返回先把32位偏移量弹出到EIP寄存器中, 再把16位段值弹出到CS寄存器中。这两种返回指令在功能上与以下两条指令相同:
RETN: POP EIP
RETF: POP CS:EIP
在使用CALL/RET指令时,有两点必须要注意:
第一,NEAR调用在返回时必须使用NEAR返回,FAR调用在返回时必须使用FAR返回。如果在汇编程序设计时错误地使用调用和返回方式,则程序返回的地址可能不对,并且堆栈的一致性将会被破坏。(CALL也有NEAR和FAR之分)
第二,在子程序中若有数据压入堆栈,则必须在子程序返回前正确地弹出堆栈,否则堆栈的一致性也被破坏。
masmaster
2011-05-23
打赏
举报
回复
ret用栈中的数据修改IP,实现近转移;retf用栈中的数据修改IP和CS,实现远转移。
逆向笔记--常用到的汇编知识点
函数调用与返回过程 call过程: // 段内call通常进行两步操作 push ip jmp addr // 如果call的函数不是本段当中的地址 push cs push ip jmp addr ret过程: ret实际上是一个伪指令,由编译器决定在编译时最终使用retn(return from near procedure)或者re
tf
(return from far procedure),这实际上对应了call的两种方式 段内call不需要将段地址压栈,对应的retn只需要实现 pop i
实用代码脚本易语言源码寻找磁盘文件
实用代码脚本易语言源码寻找磁盘文件
实用代码脚本易语言源码逍遥液晶
实用代码脚本易语言源码逍遥液晶
高校技术转移办公室人员如何通过产业大脑提升科研成果转化效率?.docx
高校技术转移办公室人员如何通过产业大脑提升科研成果转化效率?
AIC8800-RSCD80X2S-RK3572-Android16适配WIFI,WIFI验证正常使用
AIC8800-RSCD80X2S-RK3572-Android16适配WIFI,WIFI验证正常使用
汇编语言
21,500
社区成员
41,617
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章