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

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

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

#include 

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        ebp
0040D481   mov         ebp,esp
0040D483   sub         esp,4Ch
0040D486   push        ebx
0040D487   push        esi
0040D488   push        edi
0040D489   lea         edi,[ebp-4Ch]
0040D48C   mov         ecx,13h
0040D491   mov         eax,0CCCCCCCCh
0040D496   rep stos    dword ptr [edi]
10:       int a, b, c;
11:
12:       a = 1;
0040D498   mov         dword ptr [ebp-4],1
13:       b = 2;
0040D49F   mov         dword ptr [ebp-8],2
14:
15:       c = add(a, b);
0040D4A6   mov         eax,dword ptr [ebp-8]
0040D4A9   push        eax
0040D4AA   mov         ecx,dword ptr [ebp-4]
0040D4AD   push        ecx
0040D4AE   call        @ILT+15(add) (00401014)
0040D4B3   add         esp,8
0040D4B6   mov         dword ptr [ebp-0Ch],eax
16:
17:       printf("%d\n", c);
0040D4B9   mov         edx,dword ptr [ebp-0Ch]
0040D4BC   push        edx
0040D4BD   push        offset string "%d\n" (0042201c)
0040D4C2   call        printf (0040d740)
0040D4C7   add         esp,8
18:       return 0;
0040D4CA   xor         eax,eax
19:   }
0040D4CC   pop         edi
0040D4CD   pop         esi
0040D4CE   pop         ebx
0040D4CF   add         esp,4Ch
0040D4D2   cmp         ebp,esp
0040D4D4   call        __chkesp (0040d700)
0040D4D9   mov         esp,ebp
0040D4DB   pop         ebp
0040D4DC   ret

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

3:    int add(int a, int b)
4:    {
004010A0   push        ebp
004010A1   mov         ebp,esp
004010A3   sub         esp,40h
004010A6   push        ebx
004010A7   push        esi
004010A8   push        edi
004010A9   lea         edi,[ebp-40h]
004010AC   mov         ecx,10h
004010B1   mov         eax,0CCCCCCCCh
004010B6   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         edi
004010BF   pop         esi
004010C0   pop         ebx
004010C1   mov         esp,ebp
004010C3   pop         ebp
004010C4   ret

你可能感兴趣的:(Visual,Studio,C语言,VC6.0,C语言,反汇编)