简单理解栈帧结构

来源:互联网 发布:p2p网络电视 编辑:程序博客网 时间:2024/05/22 05:10

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

#include<stdio.h>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<stdio.h>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;}

这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述

这里写图片描述这里写图片描述这里写图片描述这里写图片描述这里写图片描述![`

原创粉丝点击