我和其他几千人收到 Microsoft Visual C++ 运行时抛出的错误:
为了搜索引擎的利益,说:
Microsoft Visual C++ Runtime Library
Buffer overrun detected!
Program: %s
A buffer overrun has been detected which has corrupted the program's
internal state. The program cannot safely continue execution and must
now be terminated.
现在我明白了什么是缓冲区溢出,以及为什么它是一件坏事。鉴于 Microsoft 新强调“
它只是坏了”,MSVCRT中的额外缓冲区检查可能是一件好事。
另一方面,我不在乎。并不是程序无法继续,而是程序无法安全地继续。好吧,我宁愿不安全,因为这比什么都没有好。我喜欢危险的生活。
那么有人可以建议什么吗?我在想这样的事情:
Microsoft Visual C++ Runtime Library 的公司的支持网站,但他们没有提及哪些函数可能溢出,或者如何禁用溢出检查。
项目属性 -> 配置属性 -> C/C++ -> 代码生成 -> 缓冲区安全检查。
这对应于
/GS(缓冲区安全检查)编译器选项:
检测到一些缓冲区溢出 覆盖返回地址,一个常见的 利用代码的技术 不强制缓冲区大小 限制。这是通过以下方式实现的 将安全检查注入 编译后的代码。
你应该以同样的方式对待它,因为从逻辑上讲这是同一件事。只是 CRT 导致进程崩溃,而不是操作系统。
但是,如果您使用库的调试版本,则使用发布版本可能会获得更好(?)的结果(也许它会在没有对话框通知的情况下崩溃)。
如果它在您的代码中,您可以使用 /GS- 选项禁用溢出检查。 但你真的应该修复这个错误。
wine运行旧游戏时也可能导致这种情况。
然后您可以通过以下方式修复它:例如MESA_EXTENSION_MAX_YEAR=2002 wine CoDSP.exe
。