esp和ebp寄存器

328 阅读1分钟
基本释义

esp: stack pointer,堆栈指针,对应高级语言中的栈顶指针。pop和push指令会自动调整esp的值。
ebp: base pointer, 基址指针, 对应高级语言中栈底指针,它也是某时刻的esp。

标准函数调用

push ebp ####保存caller(父函数,调用者)栈底地址到栈空间,用于结束调用时恢复caller执行上下文
mov ebp, esp ####以栈顶作为callee的基栈地址,即申请了一个全新的栈帧,用于新函数执行
sub esp, xxx ####预留callee本地变量在栈顶存放空间。

栈申请和释放

栈空间从高地址向低地址增长,因此esp值减小表示申请栈空间,esp值增大表示回收栈空间。
函数执行结束后ret指令从栈顶恢复(pop)出cs和ip(call指针保存在栈空间),然后跳转到对应地址(cs+ip)执行。