我已经反汇编了一些 C/C++ 代码,并意识到在程序开始时指定了堆栈边界,就像这样:
1. push ebp
2. mov ebp , esp
3. sub esp , <power> ; <power> is specified by mpreferred-stack-boundary=2^power
上面的代码用于创建堆栈帧,但我需要知道的是为什么使用这个减法,导致堆栈向下增长(通过对局部变量使用推送),这样的减法导致:
---------------------------- ^
by sub esp,<power> <---- esp |
. |
. |
. |
---------------------------- |
esp <---- esp |
---------------------------- |
ret address |
---------------------------- |
上图显示了。所以当在其余代码中时,如果您有以下代码:
push var1
它应该在它的顶部,所以它看起来像这样:
-----------------------------
var1 (4 byte)
-----------------------------^
by sub esp,<power> <---- esp |
. |
. |
. |
---------------------------- |
esp <---- esp |
---------------------------- |
ret address |
---------------------------- |
那么 esp 和 var1 之间的空间将是免费的,没有任何用处?这就是我想知道的。
