栈帧详解
我们知道,栈帧又称
过程活动记录,主要用于记录函数调用过程中的一些
局部变量和中间数据。
下面,我们用一个简单的程序的汇编过程来分析程序在内存中的存储情况。
主函数的汇编过程:
首先,我们都知道每一个栈帧都有其自己的栈底指针ebp和栈顶指针esp。每一个函数的每一次运行都需要在栈区中开辟出一个栈帧,可是一个CPU中的栈帧不可能无限的增加,所以,当有新的栈帧出现时,原先的栈帧的ebp和esp就被新开辟的栈帧的esp和ebp所覆盖,当新栈帧释放后,指针又指向原来的栈底和栈顶。
当此程序在内存中运行时,首先进行main函数的运行。我们要知道,在main函数的汇编之前,栈区中已经存在一个ebp和esp。
我们分步剖析main函数的汇编过程:
Step 1:push ebp//此时的ebp是原先栈帧的栈底地址,将这个地址压栈,即保存原先栈帧的栈底地址。
Step 2:mov ebp,esp//mov,数据传送器,将esp的值传送给ebp,即将ebp指向当前的栈顶地址。
Step 3:sub esp