2014-10-31 75 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