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 【平衡堆栈】
汇编中函数实现体:
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
【返回:回到函数调用处】