【栈帧】深入理解函数的调用(栈帧)
2017-01-09 23:16
239 查看
在了解栈帧之前,让我们首先了解一些有关栈帧的基础知识。
什么是栈?
在计算机系统中,栈则是一个具有以上属性的动态内存区域。程序可以将数据压入栈中(入栈,push),也可将数据从栈顶弹出(出栈,pop)。先入栈的数据后出栈。
一个函数的活动记录用esp和ebp这两个寄存器划定范围。esp寄存器始终指向栈的顶部,ebp寄存器指向函数活动记录的一个固定位置,ebp寄存器又称为帧指针。
下面我们来看一个简单的例子(在VC6.0中运行)
#include<stdio.h> int Add(int x,int y) { int ret = 0; ret = x + y; return ret; } int main() { int x = 10; int y = 20; int z = 0; z = Add(x,y); printf("%d",z); return 0; }
我们可以通过反汇编来了解函数的调用过程:
执行F11来到了这里
再按F11就进入了Add函数的代码处
相关文章推荐
- 深入理解函数的调用过程——栈帧
- 深入理解JavaScript系列(4):立即调用的函数表达式
- 子函数调用——对栈帧的理解
- 深入理解JavaScript系列 ----(4):立即调用的函数表达式
- <深入理解JavaScript>学习笔记(4)_立即调用的函数表达式
- 深入理解C语言的函数调用过程
- 深入理解JavaScript系列(4) 立即调用的函数表达式
- 函数调用入栈基本步骤(感觉和进程的栈帧结构一块看会比较容易理解)
- [DELPHI-码农]理解 Delphi 的类(十) - 深入方法[15] - 调用其他单元的函数
- 深入理解JavaScript系列(4):立即调用的函数表达式
- 深入理解Javascript: 立即调用的函数表达式
- 深入理解:立即调用的函数表达式
- 深入理解动态库- 函数调用,__stdcall,__cdecl,__fastcall,thiscal
- 深入理解立即调用的函数表达式
- 函数调用入栈基本步骤(感觉和进程的栈帧结构一块看会比较容易理解)
- 深入理解JavaScript系列(4):立即调用的函数表达式
- 深入理解JavaScript系列(4):立即调用的函数表达式
- 深入理解Javascript系列————立即调用的函数表达式
- 深入理解JavaScript系列(4):立即调用的函数表达式
- 深入理解JavaScript系列(4):立即调用的函数表达式