函数调用的过程
2016-04-15 22:39
197 查看
1:栈帧
①:关于栈:
A:首先明确一点,栈是向下生长的,所谓的向下生长,即从高地址向低地址延伸。即变量从栈的高地址向低地址存储。
B:其次,介绍一组寄存器变量,ebp在未受改变时始终指向栈底,其作用常常用来寻址。
C:寄存器esp会随着数据的出栈和压栈而移动,在未受改变时始终指向栈顶。
2:函数的调用过程
见下图: mainCRTStartup()函数调用main()函数;
(1):先将调用者mainCRTStartup()函数的基址入栈,保存之前任务的信息。
(2):然后调用函数时将ebp指针移到mainCRTStartup()函数所占内存空间的栈顶。作为新的基址即main( )函数【栈底】的基址来使用。
(3):随后在被调用者main()函数的栈底上开辟相应的空间,作为被调用者main()函数的栈空间。
(4):函数返回后 esp及移动到ebp处,恢复为调用者的栈顶。
①:关于栈:
A:首先明确一点,栈是向下生长的,所谓的向下生长,即从高地址向低地址延伸。即变量从栈的高地址向低地址存储。
B:其次,介绍一组寄存器变量,ebp在未受改变时始终指向栈底,其作用常常用来寻址。
C:寄存器esp会随着数据的出栈和压栈而移动,在未受改变时始终指向栈顶。
2:函数的调用过程
见下图: mainCRTStartup()函数调用main()函数;
(1):先将调用者mainCRTStartup()函数的基址入栈,保存之前任务的信息。
(2):然后调用函数时将ebp指针移到mainCRTStartup()函数所占内存空间的栈顶。作为新的基址即main( )函数【栈底】的基址来使用。
(3):随后在被调用者main()函数的栈底上开辟相应的空间,作为被调用者main()函数的栈空间。
(4):函数返回后 esp及移动到ebp处,恢复为调用者的栈顶。
相关文章推荐
- Invalid proguard configuration file path D:\...\proguard.cfg does not exist or is not a regular file
- iOS中通知中心的概念知识吧(objective - c版)
- Node.js学习 - Stream
- Node.js学习 - Buffer
- JAVA反射机制(及反射调用的性能简测)
- android之返回键与依次弹出返回栈
- VS 创建 使用C++ 静态类库(Dll)
- Java基础学习(三)—面向对象(上)
- Linux防火墙iptables学习笔记(三)iptables命令详解和举例[转载]
- effective c++读书笔记(一)
- 计算几何--矢量和线段
- UVA 1611 Crane 起重机 操作题 (2013 CE )
- STL之vector的用法二
- 计蒜客 挑战难题 爬楼梯
- Debug、Release、Archive、Profile、Analyze概念解释
- java 三种调用机制(同步、回调、异步)
- 5.4 桶排序
- Flume入门教程
- JS继承
- 方波信号的圆角和过冲(摘抄)