首页 文章

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

提问于
浏览
-1

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

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

1 回答

  • 1

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

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

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

相关问题