汇编–C++/c返回值代码分析
函数调用、返回值运用的代码
10: main() 11: { 00401050 push ebp 00401051 mov ebp,esp 00401053 sub esp,44h 00401056 push ebx 00401057 push esi 00401058 push edi 00401059 lea edi,[ebp-44h] 0040105C mov ecx,11h 00401061 mov eax,0CCCCCCCCh 00401066 rep stos dword ptr [edi] 12: 13: int m; 14: m=plus(1,3); 00401068 push 3 0040106A push 1 0040106C call @ILT+0(plus) (00401005) 00401071 add esp,8
00401074 mov dword ptr [ebp-4],eax //这个是存入数据的语句,这个时候调用plus函数已经堆栈平衡了,这层调用是发生在main函数内的 ebp-4是变量,一般返回值都是写在eax内的
15: printf(“m=%d”,m); 00401077 mov eax,dword ptr [ebp-4] 0040107A push eax 0040107B push offset string “m=%d” (0042201c) 00401080 call printf (004010b0) 00401085 add esp,8 16: __asm 17: { 18: mov eax,eax 00401088 mov eax,eax 19: } 20: return; 21: 22: } 0040108A pop edi 0040108B pop esi 0040108C pop ebx 0040108D add esp,44h 00401090 cmp ebp,esp 00401092 call __chkesp (00401130) 00401097 mov esp,ebp 00401099 pop ebp 0040109A ret