反汇编逆向实例_简单函数调用
by:比方
逆向反汇编第一章,基本函数调用
示例代码:
1 #include"stdio.h" 2 int function(int a,int b) 3 { 4 int c=a+b; 5 return c; 6 } 7 void main() 8 { 9 function(1,2);10 getchar();11 }
反汇编结果:
1 #include "stdio.h"2 3 int function(int a,int b)4 5 {
00C213A3 sub esp,0CCh ;空出一片栈空间用来存储局部变量,本函数内部使用
00C213A9 push ebx ;esp-4 保存环境
00C213AA push esi ;esp-4 保存环境
00C213AB push edi ;esp-4 保存环境
;写es断点调试,因为临时变量区没有代码,大小为0cch
00C213AC lea edi,[ebp-0CCh]
00C213B2 mov ecx,33h
00C213B7 mov eax,0CCCCCCCCh
00C213BC rep stos dword ptr es:[edi] ;es段edi位置正好是本函数使用开始使用的栈起始地址。
1 ;int c= a+b;
00C213BE mov eax,dword ptr [a] ;mov eax,[ebp+8] 参数1即a 为什么加8,因为前面压入了8字节分别为main做的压入EIP和前面的Push ebp
00C213C1 add eax,dword ptr [b] ;add eax,[ebp+0ch] 参数2即b ebp里的值始终是esp原值
00C213C4 mov dword ptr [c],eax
1 ;return c;
00C213C7 mov eax,dword ptr [c] ;eax始终用来存放返回值
}
00C213CA pop edi ;恢复环境
00C213CB pop esi ;恢复环境
00C213CC pop ebx ;恢复环境
00C213CD mov esp,ebp
00C213CF pop ebp
00C213D0 ret