繁体   English   中英

静态分析以检测Visual Studio C ++ 2012上的缓冲区溢出

[英]Static Analysis to detect Buffer Overrun on Visual Studio C++ 2012

以下代码将写入内存中的无效区域,但没有编译错误。

int _tmain(int argc, _TCHAR* argv[])
{
    char* s1 = new char[10];
    for(int i=0;i<20;i++) s1[i]='a';
    cout << s1 << endl;
    return 0;
}

在运行时,该代码以返回代码0终止(打印20 a),然后在遇到0之前出现一些垃圾,但是我认为这非常危险,因为它可能污染/非法访问内存中的其他区域。

有什么办法可以在编译时发现这种错误? 还是至少出现一个运行时异常,直接指向s1[i]='a'行?

按照其他帖子的建议设置/ RTC和/ GS标志没有帮助。

运行Visual Studio代码分析(ANALZYE->运行代码分析)也不会产生任何结果。

这里发布了第三方工具列表: Windows上的C ++静态代码分析工具,但我希望有一种方法可以通过Visual Studio单独检测?

根据http://msdn.microsoft.com/zh-cn/library/8dbf701c.aspx,/GS (缓冲区安全性检查)是在运行时执行的,而不是在编译类型中执行的。

/ RTC(根据http://msdn.microsoft.com/zh-cn/library/8wtf2dfz.aspx )控制运行时检查。 因此,这两个开关都不是为对代码进行静态分析而设计的。 也就是说,他们不应该在编译时检测到您的问题。

我认为静态代码分析总体上仍处于研究阶段,对于VS 2012提供全面的支持我会感到惊讶。

另一种可能性是,您尝试检测的特定类型的错误是数组越界错误。 缓冲区溢出可能不是执行搜索的正确关键字。

暂无
暂无

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

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