注册 登录
编程论坛 汇编论坛

反汇编中的 RETN 问题

evilloop 发布于 2013-04-10 16:15, 3078 次点击
反汇编进行破解软件的过程中,发现程序注册校验出现在一行 RETN 2C 处,但不太明白这RETN 返回到何处了

一阵搜索后只看到下边几句话
    ###########
  RETN/RETF是跳出子程序的指令,被称为返回指令。RETN指令用于从段内转移CALL进的子程序中返回;RETF指令用于从段间转移CALL进的子程序中返回
  RETN/RETF在反汇编代码中呈现的形式如下:
  RETN
  RETN   操作数1
  RETF
  RETF   操作数1
  RETN等价于一条指令:POP   eip
  RETF等价于两条指令:
  POP   eip
  POP   CS
  而带有操作数的RETN/RETF指令则是在POP之后,执行ESP=ESP+操作数1。
    ###########

但粗体的那句话不太明白,希望哪位朋友给解释系,在此谢过

[ 本帖最后由 evilloop 于 2013-4-10 16:16 编辑 ]
6 回复
#2
xkwy00002013-04-11 11:06
这条指令我也研究了很多书,“能授人以规矩,却不能令人巧”,终因不巧而告终
#3
wp2319572013-04-11 11:08
反汇编 好难啊
#4
hu9jj2013-04-12 08:09
没有接触过反汇编,仅仅用过DEBUG查看过部分代码,应该算不上是反汇编吧。
#5
信箱有效2013-04-12 12:26
以下是引用xkwy0000在2013-4-11 11:06:08的发言:

这条指令我也研究了很多书,“能授人以规矩,却不能令人巧”,终因不巧而告终
一个是near 一个是far 需要多少书来研究啊
RETN 2C 返回地址看堆栈 ESP加2c 释放栈空间。
#6
zklhp2013-04-12 17:47
在现在的硬件条件下 也就是32位保护模式为主的大环境下 也就是用用近返回retn 远返回retf很少用

发现程序注册校验出现在一行 RETN 2C 处


一般来说 2c提供了一个信息 也就是参数的数量 注意这里和C的return不一样的 这里是esp加的数 因为压栈是减esp的
#7
zklhp2013-04-12 17:49
指令不熟一定要看书 如果还有疑问就去看指令手册
1