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

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

本文关键字:2012 缓冲区 溢出 C++ Studio 用于 检测 Visual 静态分析      更新时间:2023-10-16

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

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 ->运行代码分析)也没有给出任何结果。

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

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

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

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

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