函数的调用过程(栈帧)
来源:互联网 发布:电影票售票系统 java 编辑:程序博客网 时间:2024/05/21 11:09
拿一段简单的代码为例:
#include <stdio.h>
int Add(int x,int y )
{
int z = 0;
z = x+y;
return z;
}
int main()
{
int a = 10;
int b = 20;
int c = 0;
c = Add(a,b);
printf("%d \n",c);
return 0;
}
程序调试的时候,查看调用堆栈:
不难发现:main函数在__tmainCRTStartup函数中调用;而__tmainCRTStartup函数是在mainCRTstartup中被调用。
栈是从高地址向低地址延伸的。每个函数的每次调用,都有它自己独立的一个栈帧,这个栈帧中维持着所需要的各种信息。寄存器ebp指向当前的栈帧的底部(高地址),寄存器esp指向当前的栈帧的顶部(低地址)。——“来自搜狗百科”
那么调用main函数,分配栈帧空间,栈帧维护如下:
接下来,有了这些铺垫,我对应汇编代码来说明:
1.先从main函数开始:
2.传参
接着执行call指令按F11:
再按F11:
进入Add函数:
接下来是返回部分:
最后,将30带回给c。
如有误,欢迎朋友们指出!
阅读全文
1 0
- 函数调用过程的真实情况(栈帧)
- 函数的调用过程(栈帧)
- 函数的调用过程(栈帧)
- 函数的调用过程(栈帧)
- 函数的调用过程(栈帧)
- 函数的调用过程(栈帧)
- 关于函数的调用过程(栈帧)
- 小结 | 函数的调用过程(栈帧)
- 函数的调用过程(栈帧)
- 函数的调用过程(栈帧)
- 函数的调用过程(栈帧)
- 函数的调用过程(栈帧)
- 函数的调用过程--栈帧
- 函数调用的过程
- 函数调用的过程
- 函数调用的过程
- 函数的调用过程
- 函数的调用过程
- 二十四天
- UVA 11468 Substring(AC自动机+概率DP)
- 9点C++(3)
- 如何让VMware上的linux虚拟机使用本机网络上网?
- Mac OS X下Hadoop、Spark单机版环境搭建
- 函数的调用过程(栈帧)
- linux下vim常见命令总结
- 9点C++(4)
- 链式栈
- MySQL中截取字符串
- javaScript的封装特点和继承机制
- 自动将自定义的Revit样板文件显示在创建项目页面中
- 2017多校联合二1011/hdu6055Regular polygon计算几何+思维+暴力枚举
- Spring MVC之@RequestMapping 详解