【问题标题】:How to know the stack size limit of .exe program?如何知道.exe程序的堆栈大小限制?
【发布时间】:2019-09-17 23:15:24
【问题描述】:

看来我的程序(使用 mingw g++ 构建)由于堆栈内存不足而崩溃。我使用编译选项-Wl,--stack,64000000 来增加堆栈限制,但问题仍然存在。我想知道是否有实用程序或方法来检查我的.exe 程序的当前堆栈限制,以便我可以验证限制确实更改为该值。

【问题讨论】:

  • 到目前为止您尝试过什么?必须有一种方法可以检查 PE 可执行文件(我不熟悉 Windows 环境)。对于 ELF,合适的工具是 readelfnmobjdump 等(参见 stackoverflow.com/questions/32542041/…)。另外,请注意,您可能会遇到其他一些堆栈限制约束,因为它不是可执行文件的属性,而是环境(OS、shell 等)的属性。在使用bash 的unix 系统上,可以调用ulimit -s 来获取当前堆栈大小限制。最后,您使用的是 GNU 链接器吗?

标签: gcc stack mingw exe stack-size


【解决方案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 是堆栈大小的字节数。

【讨论】:

    猜你喜欢
    • 2021-07-27
    • 2018-01-17
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2012-11-19
    • 2023-04-10
    相关资源
    最近更新 更多