这里分析一下c/c++中的函数之间的调用和堆栈的关系。下面的分析是在vs2005的环境里做的。
c程序:
#include <stdio.h>
int fun(int i,int j)
{
int re = i + j;
return re;
}
int main()
{
fun(1,2);
return 0;
}
上面的这段程序就不需要多说了吧。重点说一下下面的汇编(如有错误,请给与指正)。首先说明一点,我们在真正写汇编的时候不会像下面这样写的。以main函数为例,以_main:开始并以ret结束。下面的汇编是通过vs直接整出来的,没有处理(O(∩_∩)O哈哈~)。
汇编:
通过上面的内容我们可以发现main里主要是条用了一下自己写的fun函数。
int main()
{
00411A10 push ebp ;保存之前的ebp
00411A11 mov ebp,esp ;ebp指向esp的位置
00411A13 sub esp,0C0h ;将esp减去0c0h。为main中的临时变量预留空间
00411A19 push ebx ;保存ebx
00411A1A push esi ;保存esi
00411A1B push edi ;保存edi
00411A1C lea edi,[ebp-0C0h] ;将ebp-0c0h,即原理的sub esp, 0c0h后的esp地址保存到edi中
00411A22 mov ecx,30h ;将e