便携式可执行堆栈大小和操作(x64)

时间:2015-03-21 22:52:53

标签: 64-bit portable-executable

在此图片中:https://i.imgur.com/LIImg.jpg

在代码部分下面列出第一条指令,从堆栈指针中减去0x28。为什么需要从应该为0的堆栈指针中减去,对吧?或者从顶部开始并减少工作量? PE标头中的哪个位置指定堆栈大小?

1 个答案:

答案 0 :(得分:1)

堆栈指针不必为0.事实上,并且由于Windows使用平面内存模型,它将具有一些非零值,大到足以允许在需要堆栈时向下增长。

将值减去堆栈指针的操作通常可以在C函数的标准序言中找到。它允许函数为局部变量保留堆栈空间。有时,如果您选择在运行时检查堆栈缓冲区溢出,编译器会添加自己的局部变量以帮助进行一些优化,或者帮助一些链接到程序的堆栈检查函数。

通过使用带有/ HEADERS选项的可执行文件上的DUMPBIN实用程序,您可以在PE可执行文件中看到提交和保留的堆栈空间。您可以使用链接器选项(在Visual Studio中)更改保留和提交的堆栈大小