函數調用反彙編
windows堆棧:向低地址擴展。
堆棧平衡:
windows堆棧就是一塊普通的內存,主要用來存儲一些臨時數據和參數等,可以想像成一個公共的箱子,大家都會用,每個人用完都要使它和用之前一樣。
main函數中的調用:
0100176E 6A 02 push 2
01001770 6A 01 push 1 【函數參數】
01001772 E8 A7 F8 FF FF call FounC1 (0100101Eh) 【調用函數】
01001777 83 C4 08 add esp,8 【平衡堆棧】
- 1
- 2
- 3
- 4
彙編中函數實現體:
008316A0 push ebp
008316A1 mov ebp,esp
【提升堆棧】為函數執行提供空間
008316A3 sub esp,0C0h
008316A9 push ebx
008316AA push esi
008316AB push edi
【保護現場】
函數在執行的時候可能會用到寄存器,但是寄存器中的值可能還會用到,所以要保存寄存器中的值
008316AC lea edi,[ebp-0C0h]
008316B2 mov ecx,30h
008316B7 mov eax,0CCCCCCCCh
008316BC rep stos dword ptr es:[edi]
【填充緩衝區】
008316BE mov eax,dword ptr [x]
008316C1 add eax,dword ptr [y]
【函數功能】
008316C4 pop edi
008316C5 pop esi
008316C6 pop ebx
【恢復現場】
008316C7 mov esp,ebp
008316C9 pop ebp
【降低堆棧,恢復棧底】
008316CA ret
【返回:回到函數調用處】


TAG:程序員小新人學習 |