EBP一般和ESP配合使用,作用很大啊。
比如,子程序的开头往往这样子的:
push
ebp
mov
ebp,
esp
add
esp,FFFFFFF8
;预留局部变量存储空间
... ...
先保存EBP最原先的值入栈,然后把当前的ESP的值赋给EBP,以后通过[EBP-XX]或[EBP+XX]就可以引用堆栈中的任何地方的值了。如,通过[EBP-XX],得到子程序中的局部变量,通过[EBP+XX],得到子程序的参数,等等。
在恢复堆栈的时候,EBP和ESP的配合使用,就更容易恢复了:
mov
esp,ebp
pop
ebp
在汇编中,往往用leave这条指令就实现这两条指令的功能了。