繁体   English   中英

如何在Visual C ++运行时中禁用缓冲区溢出检查?

[英]How to disable buffer overflow checking in the Visual C++ Runtime?

我和其他几千人正在收到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.

现在我明白缓冲区溢出是什么,以及为什么它是一件坏事。 鉴于微软新近强调“ 它刚刚破解 ”, MSVCRT中的额外缓冲区检查可能是一件好事。

另一方面,我不在乎。 这不是程序无法继续,而是程序无法安全继续。 好吧,我宁愿不安全,因为它总比没有好。 我喜欢危险地生活。

所以有人可以建议吗? 我在想这样的事情:

  • 一个注册表项,以防止MSVCRT停止执行
  • 使用以前的操作系统运行应用程序(Windows 7之前)
  • 将程序集清单添加到可执行文件夹,以便它使用旧版本的MSVCRT,不执行此溢出检查
  • 没有溢出检查的MSVCRT副本的版本号或下载位置

我尝试搜索编写Microsoft Visual C ++运行时库的公司的支持站点,但他们没有提到哪些函数可能溢出,或者如何禁用溢出检查。

这里有一个选项。 将其设置为否。

项目属性 - >配置属性 - > C / C ++ - >代码生成 - >缓冲区安全检查。

这对应于/ GS(缓冲区安全检查)编译器选项:

检测一些覆盖返回地址的缓冲区溢出,这是一种利用不强制执行缓冲区大小限制的代码的常用技术。 这是通过将安全检查注入已编译的代码来实现的。

这是发生在您的代码中还是实际上在库中? 如果它在库中,我知道你说你只想忽略错误,但如果是一个崩溃进程的访问冲突,你会怎么做?

你应该以同样的方式对待它,因为逻辑上它是一样的。 只是CRT正在崩溃而不是操作系统。

但是,如果您正在使用库的调试版本,那么使用发布版本可能会获得更好的(?)结果(可能只是在没有对话框通知的情况下崩溃)。

如果它在您的代码中,您可以使用/ GS-选项禁用溢出检查。 但你应该真的修复这个bug。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM