首页
社区
课程
招聘
不明白为什么非要改成ret 8,ret2,哪来的?如何计算出来的?
发表于: 2015-7-6 10:32 11736

不明白为什么非要改成ret 8,ret2,哪来的?如何计算出来的?

2015-7-6 10:32
11736
收藏
免费 0
支持
分享
最新回复 (34)
雪    币: 53
活跃值: (528)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
26
没学会跑,就想飞了。。
2015-7-15 21:05
0
雪    币: 103
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
27
一般进入一个call之后,请查看这个函数尾部的retn xx
直接抄过来就好了。
2015-7-16 09:51
0
雪    币: 135
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
楼主的汇编知识约等于0

你跟他说这些,没有的~
2015-7-16 12:16
0
雪    币: 81
活跃值: (115)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
29
这样改就相当于把原函数改成了 return 1,已经和本来的函数没关系了
至于ret后面到底是多少,原来函数尾部是多少就是多少就好了
一般来说retn后面有数字就是stdcall了,被调用方负责平栈
没数字就是cdecl,调用方负责平栈,这种情况你可以去调用函数的地方往下面翻翻,会有add esp, 20h

不平栈会怎么样?你函数调用的参数就会剩在堆栈里,可能会导致程序崩溃,也可能会没事
2015-7-16 13:11
0
雪    币: 36207
活跃值: (7170)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
30
费话真多,不明白才要发贴问的啊,个个一上来都成大神还要论坛干什么?
2015-7-16 13:37
0
雪    币: 36207
活跃值: (7170)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
31
原来如此,又学了一招.
2015-7-16 13:39
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
32
程序平栈
跟函数的调用约定有关。
如果是 使用__stdcall 或者 __fastcall 调用约定 ,函数自行平栈。
   汇编中
  在函数末尾就有
  retn 10
  含义就是 本函数有 4个参数 (4*4 = 16 即为 0x010)

如果是 使用__cdecl调用约定,调用者平栈
  汇编中即为
  push  a
  push  b
  push  c
  push  d
  call  xxxxxx
  add esp,10
2015-7-16 15:25
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
33
好难啊......
2015-7-17 00:45
0
雪    币: 16547
活跃值: (1840)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
34
这贴,实在是赚大了.
2015-7-17 06:05
0
雪    币: 441
活跃值: (1085)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
35
看看我是什么级别的会员。
2016-5-27 10:33
0
游客
登录 | 注册 方可回帖
返回
//