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

[求助]ret retn 有何区别?

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

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

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 被哈嘧哈嘧哈编辑 ,原因:
2020-6-8 02:14
0
游客
登录 | 注册 方可回帖
返回

账号登录
验证码登录

忘记密码?
没有账号?立即免费注册