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

时间:2011-08-24 08:06:05

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

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

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

如何删除这些来电?

2 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:3)