2014-10-31 130 views
-3

以下是我的代码。帮助我理解下面的代码是什么意思:反汇编代码中的ebp和esp是什么意思?

push ebp 
    mov  ebp, esp 
    sub  esp, 230h 
+0

相关:http://stackoverflow.com/questions/20695203/behaviour-of-ebp-and-esp-in-stacks-using-function-with-parameter – nrz 2014-10-31 22:53:28

+0

可能的重复[为什么在函数序言/结尾中使用ebp?](http://stackoverflow.com/questions/15655553/why-to-use-ebp-in-function-prologue-epilogue) – 2016-06-23 12:24:25

回答

1

这是一个函数序言

推旧基指针到堆栈,所以它可以在以后恢复:

push ebp 

分配堆栈指针的入基指针值,那么一个新的堆栈帧将在旧的顶部被创建堆栈帧:

mov  ebp, esp 

移动堆栈通过降低或增加其值(取决于堆栈是否生长向下或向上)进一步指针:

sub  esp, 230h 

这里,230h立即数值是堆栈中为本地函数中保留的字节数。

以类似的方式,函数结尾反转序言的操作并将控制返回给调用函数。

选中此相关的SO问题:Function Prologue and Epilogue in C

+0

一些编译器提供了选项不使用帧指针,这将释放ebp以用作通用寄存器(它仍然需要保存)。 – rcgldr 2014-11-01 02:17:05