如何在 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/