您的位置:首页 > 编程语言 > C语言/C++

C++反汇编八(函数调用_Debug版本)

2012-02-16 21:25 351 查看
int x=CallFunc(2,3);
0040185B   push        3								// 第二个参数3入栈
0040185D   push        2								// 第一个参数2入栈
0040185F   call        @ILT+105(CallFunc) (0040106e)	// 调用CallFunc
00401864   add         esp,8							// VC编译器默认为__cdel传递方式,所以由调用者恢复堆栈
00401867   mov         dword ptr [ebp-4],eax			// 返回值eax放局部变量ebp-4

0040106E   jmp         CallFunc (004017f0)

int CallFunc(int x,int y)
104:  {
004017F0   push        ebp								// 保存当前ebp
004017F1   mov         ebp,esp							// 调整ebp指向当前esp,用来寻址
004017F3   sub         esp,40h
004017F6   push        ebx
004017F7   push        esi
004017F8   push        edi
004017F9   lea         edi,[ebp-40h]
004017FC   mov         ecx,10h
00401801   mov         eax,0CCCCCCCCh
00401806   rep stos    dword ptr [edi]					// 堆栈初始化
105:      return x+y;									// 堆栈中从高到低依次为参数2/参数1/返回地址/当前ebp/局部变量1/局部变量2
00401808   mov         eax,dword ptr [ebp+8]			// 参数1放eax
0040180B   add         eax,dword ptr [ebp+0Ch]			// 参数2与eax相加后返回到eax中
106:  }
0040180E   pop         edi
0040180F   pop         esi
00401810   pop         ebx
00401811   mov         esp,ebp
00401813   pop         ebp
00401814   ret
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  汇编 c++ 编译器