函数调用战帧过程解析图

来源:互联网 发布:截面数据举例 政策 编辑:程序博客网 时间:2024/05/19 20:59
这里,我们来研究如下代码的栈帧过程。为了初学者理解汇编指令,所以编译环境是在vc++6.0下
#include<stdio.h>#include<stdlib.h>int sum(int _a,int _b){    int c=0;    c=_a+_b;    return c;}int main(){    int a=10;    int b=20;    int ret=0;    ret=sum(a,b);    printf("%d\n",ret);    system("pause");    return 0;}

//如下是从vc++6.0中截取的汇编指令--- f:\vc\a\a.cpp  ----------------------------------------10:11:   int main()12:   {00401060   push        ebp00401061   mov         ebp,esp00401063   sub         esp,4Ch00401066   push        ebx00401067   push        esi00401068   push        edi00401069   lea         edi,[ebp-4Ch]0040106C   mov         ecx,13h00401071   mov         eax,0CCCCCCCCh00401076   rep stos    dword ptr [edi]13:       int a=10;00401078   mov         dword ptr [ebp-4],0Ah14:       int b=20;0040107F   mov         dword ptr [ebp-8],14h15:       int ret=0;00401086   mov         dword ptr [ebp-0Ch],016:17:       ret=sum(a,b);0040108D   mov         eax,dword ptr [ebp-8]00401090   push        eax00401091   mov         ecx,dword ptr [ebp-4]00401094   push        ecx00401095   call        @ILT+0(sum) (00401005)0040109A   add         esp,80040109D   mov         dword ptr [ebp-0Ch],eax18:       printf("%d\n",ret);004010A0   mov         edx,dword ptr [ebp-0Ch]004010A3   push        edx004010A4   push        offset string "%d\n" (00424024)004010A9   call        printf (00401200)004010AE   add         esp,819:20:       system("pause");004010B1   push        offset string "pause" (0042401c)004010B6   call        system (004010f0)004010BB   add         esp,421:   }004010BE   pop         edi004010BF   pop         esi004010C0   pop         ebx004010C1   add         esp,4Ch004010C4   cmp         ebp,esp004010C6   call        __chkesp (00401280)004010CB   mov         esp,ebp004010CD   pop         ebp004010CE   ret--- f:\vc\a\a.cpp  ----------------------------------------1:    #include<stdio.h>2:    #include<stdlib.h>3:4:    int sum(int _a,int _b)5:    {00401020   push        ebp00401021   mov         ebp,esp00401023   sub         esp,44h00401026   push        ebx00401027   push        esi00401028   push        edi00401029   lea         edi,[ebp-44h]0040102C   mov         ecx,11h00401031   mov         eax,0CCCCCCCCh00401036   rep stos    dword ptr [edi]6:        int c=0;00401038   mov         dword ptr [ebp-4],07:        c=_a+_b;0040103F   mov         eax,dword ptr [ebp+8]00401042   add         eax,dword ptr [ebp+0Ch]00401045   mov         dword ptr [ebp-4],eax8:        return c;00401048   mov         eax,dword ptr [ebp-4]9:    }0040104B   pop         edi0040104C   pop         esi0040104D   pop         ebx0040104E   mov         esp,ebp00401050   pop         ebp00401051   ret
这里写图片描述
原创粉丝点击