在看文章之前来了解两个指针:
ebp:指向函数栈底的指针
esp:指向函数栈顶栈顶指针
#include<stdio.h>
int sum(int a, int b)
{
int temp = 0;
temp = a + b;
return temp;
}
int main()
{
int a = 10;
int b = 20;
int ret = 0;
ret = sum(a, b);
printf("ret = %d\n",ret);
return 0;
}
一、函数堆栈的建立过程
接下我给程序打个断点,看一下执行时的部分汇编代码是什么样的:
1.main函数第一个大括号到函数第一条语句之间的汇编代码:
17: int main()
18: {
00151410 push ebp
00151411 mov ebp,esp
00151413 sub esp,0E4h
00151419 push ebx
0015141A push esi
0015141B push edi
0015141C lea edi,[ebp-0E4h]
00151422 mov ecx,39h
00151427 mov eax,0CCCCCCCCh
0015142C rep stos dword ptr es:[edi]
19: int a = 10;
##############################################################################
这一段汇编程序是干什么的ÿ