x86堆栈
堆栈区是同一片空间,但堆向上生长,栈向下生长,中间是空闲区域。
相关寄存器
esp寄存器
esp栈指针寄存器,其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧(当前正在使用的栈帧)的栈顶(逻辑上是栈顶,但物理上是最低的位置。)
在该堆栈保留区域中该位置以下的所有内容都是空闲的。
将值压入堆栈需要减少栈指针,然后将值写入栈指针指向的位置。
从栈中弹出一个值需要读取栈指针指向的值,然后增加栈指针。
在32位模式下,栈只能保存32位值,并且esp始终可被4整除。
ebp寄存器
EBP:基址指针寄存器(extended base pointer),其内存放着一个指针,该指针永远指向系统栈最上面一个栈帧的底部(物理上最高的位置)。
比较与总结
在通常情况下ESP是可变的,随着栈的增长而逐渐变小,而EBP寄存器是固定的,只有发生函数调用后才会改变。
栈帧结构与函数调用过程
修正:图中下面一个ebp+