为什么GCC分配它不使用的堆栈空间?

时间:2016-03-05 20:39:00

标签: c gcc x86

在许多函数中,函数序言以sub $0x1c,%esp开头,后来由add $0x1c,%esp删除。该功能可以简单到几乎不做任何事情。然而,这个空间从未使用过,并且因为我需要完全控制我的函数堆栈而变得烦恼。知道是什么导致这种情况,我该如何删除它?我正在使用-O2 -Wall -c -m32 -fno-stack-protector -fno-defer-pop -fno-builtin -march=i386进行编译。

1 个答案:

答案 0 :(得分:0)

查看更多代码会有所帮助,但它与堆栈对齐有关。你可以使用-mpreferred-stack-boundary在GCC中搞砸这个。我的机器上的默认值是4,所以事情对齐到16个字节。我非常有信心这与堆栈保护无关。要查看堆栈保护会发生什么,请使用-fno-stack-check和-fstack-check编译程序并检查结果。你会看到像

这样的东西
>   orl $0, -12300(%esp)