简单理解栈帧结构

重点内容
本图片为栈空间的开辟,以及释放,其中可以总结几点:
1. 形参实例化的顺序是从右往左的。
2. 形参实例化形成的临时变量在两个栈帧之间。
3. 函数中的变量都叫局部变量,因为函数调用完毕,栈帧结构被释放,栈帧结构的变量也都随即被释放。
4. call:将当前正在执行的指令的下一条地址压入栈中,随即call(跳转)jmp至指定函数。
5. ret:pop(弹出)栈顶,将栈顶的值弹出,且将值写入eip。
6. 函数的返回值的返回,函数定义的变量都是临时变量,所以是通过公共寄存器来返回。

#include
int Add(int x,int y)
{
int z = x + y;
    return z;
}
int main()
{
int a = 0xAAAAAAAA;
int b = 0xBBBBBBBB;
int c =Add(a,b);
printf("ret = %0x\n",Add(a,b));
return 0;
}
//用访问地址的形式修改参数
#include
int Add(int x,int y)
{
    int *p=&x;
    p++;
    *p=5;
    return x+y;
}
int main()
{
int a = 10;
int b = 10;
int c =Add(a,b);
printf("ret = %d\n",Add(a,b));
return 0;
}

简单理解栈帧结构_第1张图片简单理解栈帧结构_第2张图片简单理解栈帧结构_第3张图片简单理解栈帧结构_第4张图片简单理解栈帧结构_第5张图片这里写图片描述

简单理解栈帧结构_第6张图片简单理解栈帧结构_第7张图片简单理解栈帧结构_第8张图片简单理解栈帧结构_第9张图片简单理解栈帧结构_第10张图片![`

你可能感兴趣的:(学习笔记)