函数调用堆栈
来源:互联网 发布:淘宝没发货退款 信誉 编辑:程序博客网 时间:2024/05/22 12:34
注:袁帅+ 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000
linux内核分析的第一课:函数调用堆栈的实现
使用下面的程序来进行分析,在实验楼的环境下操作:
下面是该程序的汇编代码,去掉了那些"."开头的符号,他们是连接器使用的:
,
每个程序的开头都是 pushl %ebp,movl %esp,%ebp,最后形成的堆栈帧如下图所示:
,
带“”的数字表示该行出的地址,可见,ebp一直都是指向上一个ebp的值,而esp指向栈顶,每次进行函数调用时,都会形成一个子函数的堆栈结构,具体形式见<程序员的自我>修养,里面由详细介绍。
leave指令相当于 movl %ebp,%esp,pop %ebp。从main开始,先将当前ebp值压栈,再让ebp = esp,然后把要传给f()的参数压栈,调用f(),又产生f()的栈帧,在调用g()之前讲参数压入堆栈,接着就是调用g()。当从g()中返回时,首先弹出ebp3指向的值到ebp寄存器,即esp = esp2,pc回到15行执行,执行leave指令,使esp = esp1,pc回到23行处执行,然后再次leave指令,esp = esp0,堆栈回到调用main之前的初始状态,整个调用过程结束。
0 0
- 函数调用堆栈分析
- 函数调用堆栈分析
- 堆栈与函数调用
- 函数调用 堆栈
- 堆栈与函数调用
- 堆栈与函数调用
- 堆栈与函数调用
- 堆栈与函数调用
- 函数调用 堆栈
- 函数调用堆栈分析
- 函数调用 堆栈
- 函数调用堆栈分析
- 堆栈与函数调用
- 函数调用 堆栈
- 函数调用堆栈
- 函数调用 堆栈 转载
- 打印函数调用堆栈
- 堆栈与函数调用
- Uva 1640(计数) 解题报告
- 鼠标点击事件的响应和块级元素居中显示
- [Haskell on HackerEarth] Count Divisors
- Scala集合
- Android真机 usb调试 访问本地服务器(localhost)的解决方案
- 函数调用堆栈
- BIBTeX制作参考文献 [转]
- 产生冠军 HDU-2094
- Hadoop分布式搭建、Hbase安装、Hive安装
- 设计模式(十五):原型模式
- LeetCode 98. Validate Binary Search Tree
- 【数据结构】海量数据处理题
- C语言实现 poj3666(动态规划)
- 无聊的日