在许多函数中,函数序言以sub $0x1c,%esp
开头,后来由add $0x1c,%esp
删除。该功能可以简单到几乎不做任何事情。然而,这个空间从未使用过,并且因为我需要完全控制我的函数堆栈而变得烦恼。知道是什么导致这种情况,我该如何删除它?我正在使用-O2 -Wall -c -m32 -fno-stack-protector -fno-defer-pop -fno-builtin -march=i386
进行编译。
答案 0 :(得分:0)
查看更多代码会有所帮助,但它与堆栈对齐有关。你可以使用-mpreferred-stack-boundary在GCC中搞砸这个。我的机器上的默认值是4,所以事情对齐到16个字节。我非常有信心这与堆栈保护无关。要查看堆栈保护会发生什么,请使用-fno-stack-check和-fstack-check编译程序并检查结果。你会看到像
这样的东西> orl $0, -12300(%esp)