如何知道.exe程序的堆栈大小限制?
Posted
技术标签:
【中文标题】如何知道.exe程序的堆栈大小限制?【英文标题】:How to know the stack size limit of .exe program? 【发布时间】:2019-09-17 23:15:24 【问题描述】:看来我的程序(使用 mingw g++
构建)由于堆栈内存不足而崩溃。我使用编译选项-Wl,--stack,64000000
来增加堆栈限制,但问题仍然存在。我想知道是否有实用程序或方法来检查我的.exe
程序的当前堆栈限制,以便我可以验证限制确实更改为该值。
【问题讨论】:
到目前为止您尝试过什么?必须有一种方法可以检查 PE 可执行文件(我不熟悉 Windows 环境)。对于 ELF,合适的工具是readelf
、nm
、objdump
等(参见 ***.com/questions/32542041/…)。另外,请注意,您可能会遇到其他一些堆栈限制约束,因为它不是可执行文件的属性,而是环境(OS、shell 等)的属性。在使用bash
的unix 系统上,可以调用ulimit -s
来获取当前堆栈大小限制。最后,您使用的是 GNU 链接器吗?
【参考方案1】:
从这个answer,检查堆栈大小,您需要安装Visual Studio 并使用Visual Studio 工具dumpbin
。通常有一个脚本可以运行,以在路径中显示带有所有 Visual Studio 工具的命令提示符窗口,这是开始菜单中的 vcvarsall.bat 或“x64 Native Tools Command Prompt for VS 2019”(或类似的东西) .
运行
dumpbin /headers executable.exe
这将返回一个长输出。在该输出中,查找 OPTIONAL HEADER VALUES
,在该部分中,将有一个 size of stack reserve
。默认堆栈大小写为100000
(字节),即 1 兆字节。
您可以使用 editbin
更改可执行文件的堆栈大小,同样由 Visual Studio 提供:
editbin /stack:N executable.exe
这里 N 是堆栈大小的字节数。
【讨论】:
以上是关于如何知道.exe程序的堆栈大小限制?的主要内容,如果未能解决你的问题,请参考以下文章