VC6.0中的C语言反汇编代码

来源:互联网 发布:java map list set 编辑:程序博客网 时间:2024/04/30 12:46

C语言虽然是比较偏向底层的代码,但是后时候只通过表层的C语言执行顺序还不能完全理解C语言的执行过程,比如说i++和++i,可以通过反汇编代码来深入理解理解C语言,下面提供一个简单的main函数和add函数,可以了解到C语言汇编层面的内容。

下面的这个函数完成一个简单的相加功能:

#include <stdio.h>int add(int a, int b){return a + b;}int main(){int a, b, c;a = 1;b = 2;c = add(a, b);printf("%d\n", c);return 0;}
首先按F9进行断点,然后按Alt+F8即可进入反汇编代码。

下面是main函数的反汇编代码:

8:    int main()9:    {0040D480   push        ebp0040D481   mov         ebp,esp0040D483   sub         esp,4Ch0040D486   push        ebx0040D487   push        esi0040D488   push        edi0040D489   lea         edi,[ebp-4Ch]0040D48C   mov         ecx,13h0040D491   mov         eax,0CCCCCCCCh0040D496   rep stos    dword ptr [edi]10:       int a, b, c;11:12:       a = 1;0040D498   mov         dword ptr [ebp-4],113:       b = 2;0040D49F   mov         dword ptr [ebp-8],214:15:       c = add(a, b);0040D4A6   mov         eax,dword ptr [ebp-8]0040D4A9   push        eax0040D4AA   mov         ecx,dword ptr [ebp-4]0040D4AD   push        ecx0040D4AE   call        @ILT+15(add) (00401014)0040D4B3   add         esp,80040D4B6   mov         dword ptr [ebp-0Ch],eax16:17:       printf("%d\n", c);0040D4B9   mov         edx,dword ptr [ebp-0Ch]0040D4BC   push        edx0040D4BD   push        offset string "%d\n" (0042201c)0040D4C2   call        printf (0040d740)0040D4C7   add         esp,818:       return 0;0040D4CA   xor         eax,eax19:   }0040D4CC   pop         edi0040D4CD   pop         esi0040D4CE   pop         ebx0040D4CF   add         esp,4Ch0040D4D2   cmp         ebp,esp0040D4D4   call        __chkesp (0040d700)0040D4D9   mov         esp,ebp0040D4DB   pop         ebp0040D4DC   ret

下面是add函数的反汇编代码:

3:    int add(int a, int b)4:    {004010A0   push        ebp004010A1   mov         ebp,esp004010A3   sub         esp,40h004010A6   push        ebx004010A7   push        esi004010A8   push        edi004010A9   lea         edi,[ebp-40h]004010AC   mov         ecx,10h004010B1   mov         eax,0CCCCCCCCh004010B6   rep stos    dword ptr [edi]5:        return a + b;004010B8   mov         eax,dword ptr [ebp+8]004010BB   add         eax,dword ptr [ebp+0Ch]6:    }004010BE   pop         edi004010BF   pop         esi004010C0   pop         ebx004010C1   mov         esp,ebp004010C3   pop         ebp004010C4   ret
0 0
原创粉丝点击