c++ - VC++ 中没有运行时检查的生成代码

标签 c++ c visual-c++ compiler-construction

如何在 VC++ 2010 Express 中生成纯代码(没有运行时检查)?例如,我删除了缓冲区安全检查(set compile opt/GS-),但在我的代码中我再次看到了这些调用

call __security_init_cookie
...
call _RTC_CheckEsp
...
call _RTC_CheckEsp
...

如何移除这些调用?

最佳答案

MSVC 文档指出 __security_init_cookie 由 CRT 运行时调用,用于“使用/GS(缓冲区安全检查)编译的代码在使用异常处理的代码中”(强调)。参见 http://msdn.microsoft.com/en-us/library/ms235362%28v=VS.100%29.aspx

如果运行时库本身有代码依赖于已初始化的安全 cookie,无论您的代码是否使用它,我都不会感到惊讶(换句话说,运行时库代码可能已使用/GS 编译,如果是这样,无论您的代码是否这样做,它都需要初始化 cookie)。

至于 _RTC_CheckEsp 调用 - 应该由 /RTCs/RTC1 选项控制。从您的构建中删除这些选项,并且不应调用 _RTC_CheckEsp

关于c++ - VC++ 中没有运行时检查的生成代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7172315/

相关文章:

c - 何时释放 mex 文件中分配的内存

c++ - 为什么隐式转换对于非原始类型不模棱两可?

c++ - 如何让 VS 调试器显示对象成员的类型名称?

c++ - Microsoft Windows SChannel SSPI 自检?

C++对象的创建和销毁

visual-c++ - 混合模式程序集未加载 native C++ pdb 的符号

visual-c++ - 在Windows 7中编译Libpng或获取Libpng12.dll(并了解如何在VS中链接.DLL)

c++ - 我的工具箱中应该有哪些现代 C++ 库?

c - C中的函数重载

c - 我怎样才能向特定的 child 发送信号让它结束