反汇编逆向实例_简单函数调用

 

反汇编逆向实例_简单函数调用  

                                                                                      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  
 
 

 

posted @ 2014-08-01 14:58  比方  阅读(584)  评论(0编辑  收藏  举报