【IDA分析学习 0x01】 return返回机制

在加密与解密上看到的return返回值的汇编分析和自己用IDA打开的有所不同,但是基本差不多,做个记录:

_main函数略过,就是把参数按_stdcall标准传递进去,具体进入调用的函数:

 1 .text:00401013 sub_401013      proc near               ; CODE XREF: _main+7p
 2 .text:00401013
 3 .text:00401013 var_4           = dword ptr -4
 4 .text:00401013 arg_0           = dword ptr  8
 5 .text:00401013 arg_4           = dword ptr  0Ch
 6 .text:00401013
 7 .text:00401013                 push    ebp
 8 .text:00401014                 mov     ebp, esp        ; ebp暂存函数进入时的栈顶位置
 9 .text:00401016                 push    ecx             ; 分配一个局部变量 4字节
10 .text:00401017                 mov     eax, [ebp+arg_0] ; 取得第一个参数
11 .text:0040101A                 add     eax, [ebp+arg_4] ; 取得第二个参数并和另外一个相加
12 .text:0040101D                 mov     [ebp+var_4], eax ; 结果保存在局部变量中
13 .text:00401020                 mov     eax, [ebp+var_4] ; 局部变量的值返回到eax中
14 .text:00401023                 mov     esp, ebp        ; 恢复esp
15 .text:00401025                 pop     ebp
16 .text:00401026                 retn
17 .text:00401026 sub_401013      endp

这里是用的

mov ebp,esp 暂存esp

push ecx 来分配局部变量

...

mov esp,ebp 最后再恢复

另外书上的方式是:

mov ebp,esp 暂存esp

sub esp,4 控制esp的值分配空间

...

mov esp,ebp

add esp,4

posted @ 2016-04-24 21:45  yugan  阅读(1286)  评论(0编辑  收藏  举报