首页
社区
课程
招聘
[求助]ret retn 有何区别?
2007-6-16 18:12 25220

[求助]ret retn 有何区别?

2007-6-16 18:12
25220
收藏
点赞0
打赏
分享
最新回复 (18)
雪    币: 846
活跃值: (221)
能力值: (RANK:570 )
在线值:
发帖
回帖
粉丝
笨笨雄 14 2007-6-16 22:57
2
0
一样的,别在意
就象一个人有自己的名字也有外号一样
雪    币: 60
活跃值: (45)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kingkongk 2011-1-28 14:22
3
0
谢谢,一搜这方面的问题就进入看雪了,哈哈
雪    币: 366
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
juhanzhang 2011-8-24 20:34
4
0
同楼上
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
不能灌水 2011-11-22 10:11
5
0
雪    币: 120
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
牛皮哄哄 2011-11-22 13:54
6
1
粘的关于RetNear和RetFar
push 4000
push 5000
retf
运行后会转到4000:5000
retf是段间返回,也就是远返回
如果你的段是proc far
ret会被编译成retf,机器吗是CB

如果是retn会转到当前cs:5000
retn是段内返回,也就是近返回
如果你的段是proc near
ret会被编译成retn,机器码是C3
雪    币: 43
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
不能灌水 2011-12-1 18:09
7
0
明白了。。。
雪    币: 12
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiaoyanilw 2011-12-23 16:40
8
0
原来如此啊,多谢
雪    币: 57
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liyizhu 2012-1-15 00:51
9
0
牛皮哄哄 说的是正解
雪    币: 5
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
catry 2012-5-12 16:48
10
0
我也顶一下 搜的第二条就是看雪的
雪    币: 45
活跃值: (51)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
moasm 2012-5-14 15:58
11
0
补充点:
OD中抠出来的代码:
7C921210    C3              RETN
7C921211    C2 0400         RETN 4
7C921214    90              NOP
7C921215    CB              RETF                                     ; 远返回
7C921216    CA 0400         RETF 4                                   ; 远返回
雪    币: 416
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hyang 2012-5-26 11:11
12
0
牛皮哄哄 说的是正解
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kxxyok 2015-10-28 17:09
13
1
ret:(return)默认retn.
retn:return near=pop eip
retf: return far=pop eip;pop cs
雪    币: 62
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
gout 2015-11-11 14:05
14
0
都是子过程返回,ret会更新段寄存器值,而retn不会,对于windows下的应用,两者应该没区别,因为windows采用的平坦内存模式,就一个代码段,好像是这么说的~
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yehhhhhh 2015-11-12 18:38
15
0
以赚取Kx
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
SomeShell 2015-11-20 16:47
16
0
ret 用在c风格函数调用返回时,ret n 用在pascal风格和windows api的__stdcall规范的函数返回调用。其效果同pop eip;sub  sp,n;还不理解的话联系我,学习是枯燥的,坚持住,乐趣无处不在。。。
雪    币: 229
活跃值: (79)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
daowang 1 2015-11-23 20:51
17
1
一个是直接返回,一个会平栈,retn x,平x个字节
雪    币: 1000
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_kx86150 2019-12-10 09:30
18
0
雪    币: 1202
活跃值: (218)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
哈嘧哈嘧哈 2020-6-8 02:14
19
0

ret 是 cdecl用的,retn 是stdcall,宏汇编写 ret ,编译器根据调用预定将 ret 编译成 ret 还是 retn


抄自 Intel Opecodes And Mnemonics
RET/RETF - Return From Procedure
        Usage:  RET     nBytes
                RETF    nBytes
                RETN    nBytes
        Modifies flags: None
        Transfers control from a procedure back to the instruction address
        saved on the stack.  "n bytes" is an optional number of bytes to
        release.  Far returns pop the IP followed by the CS, while near
        returns pop only the IP register.
                                 Clocks                 Size

        Operands         808x  286    386   486         Bytes
        retn            16/20  11+m  10+m    5            1
        retn immed      20/24  11+m  10+m    5            3
        retf            26/34  15+m  18+m    13           1
        retf (PM, same priv.)   -    32+m    18           1

        retf (PM, lesser priv.) -      68    33           1
        retf immed      25/33  15+m  18+m    14           3
        retf immed (PM, same priv.)  32+m    17           1
        retf immed (PM, lesser priv.)  68    33           1

        C3 RET Near return to calling procedure
        CB RET Far return to calling procedure

        C2 iw RET imm16 Near return to calling procedure and pop imm16 bytes from stack
        CA iw RET imm16 Far return to calling procedure and pop imm16 bytes from stack

最后于 2020-6-9 11:51 被哈嘧哈嘧哈编辑 ,原因:
游客
登录 | 注册 方可回帖
返回