汇编:如果push命令已经减去,我们为什么要减去esp?

时间:2016-08-31 19:58:58

标签: assembly x86 stack

根据反汇编程序,有一些函数看起来像

sub esp, 0x20
push some registers
do some stuffs
pop the registers
add esp, 0x20
ret

起初我以为是为局部变量分配内存,但我意识到其他功能看起来就像只是

push some registers
do stuffs
pop some registers
ret

不会手动减去esp。

我做了一些搜索,显然push命令已经自动减去esp的值,推送值的大小;如果是这种情况,那么为什么在第一个函数中我们还需要在函数开头手动减去esp?或换句话说,这两个函数之间的目的究竟是什么?

1 个答案:

答案 0 :(得分:1)

我为局部变量预留(分配)堆栈空间。此外,某些版本的ABI可能需要在函数输入时使用特定的堆栈指针对齐