函数调用栈
来源:互联网 发布:乌鲁木齐 中亚 知乎 编辑:程序博客网 时间:2024/04/28 15:16
栈通常是在用户空间的最高地址处分配,而堆则通常位于栈的下方。对于栈而言,先入栈的地址高,后入栈的地址低;对于堆来说,先进堆的地址低,后进堆的地址高。
#include <stdio.h>int sum(int a,int b){int tmp=0;tmp=a+b;return tmp;}int main(){int a=10;int b=20;int ret=0;ret=sum(a,b);printf("%d\n",ret);return 0;}
对于这样一段代码,查看反汇编(VS2012中快捷键Ctrl+F11),首先进入main函数和sum函数之前都有一段类似下图的代码,是开辟栈帧。
将10、20、0三个数依次入栈,然后执行ret=sum(a,b)是先压入参数,然后再调用sum函数。压参数是从左到右依次压入,主要是为了支持像printf这样的可变参函数。
函数执行完后都要这样一段代码,即栈帧回退,把栈顶指针回退到栈底。
栈上都是通过ebp偏移决定指针内存的,每一个函数的栈底都存放了调用它的函数地址。通过查看可知main函数不是程序启动之后的第一个进程,mainCRTstartup()会是调用main()的函数。
阅读全文
0 0
- 函数调用--函数栈
- 函数调用--函数栈
- 函数调用--函数栈
- 函数调用--函数栈
- 函数调用栈-置顶!
- 函数调用栈
- 函数调用栈callstack
- 函数调用栈
- 函数调用栈分析
- 函数调用栈(栈帧)
- 函数调用栈
- 函数调用栈
- 函数调用栈
- 函数调用栈恢复
- 汇编语言---函数调用栈
- 函数调用栈初探
- 函数调用栈
- 函数调用栈
- webpack3最新版本配置研究(二)多入口,html-webpack-plugin, extract-text-webpack-plugin
- json的学习
- Android RecyclerView使用
- Logistic Regression(逻辑回归)
- 效验qq号
- 函数调用栈
- 2017.9.16队内互测——老年组Day1
- 解决fiddler抓取firefox网络包的问题
- Jquery统计表单文件总大小
- 3.1 链接加载原理及elf文件格式
- # Software-eng lab 4
- Django——登录后回到请求登录的页面
- unity代理委托的简单用法
- 数据结构入门---栈(下)