静态分析,用于检测 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 ->运行代码分析)也没有给出任何结果。
这里有第三方工具的工具列表: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将提供全面的支持。
另一种可能性是您尝试检测的特定类型的错误是数组越界错误。缓冲区溢出可能不是进行搜索的正确关键字。
相关文章:
- C++字符*缓冲区的大小
- 为什么msgrcv()将垃圾字符馈送到缓冲区
- 使用动态分配的数组会导致代码分析发出虚假的C6386缓冲区溢出警告
- ostream过载时的缓冲区冲洗
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- Xaudio2在更改缓冲区或循环时弹出声音
- 为什么我在leetcode上收到AddressSanitizer:地址0x602000000058上的堆缓冲区溢出错误
- 变量可能尚未初始化[MIRA 2012规则9.1,强制性]
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 如何在cpp.中使用协议缓冲区存储大缓冲区/数组(char/int)
- 多线程双缓冲区
- Android P-9.0.0_r53 Logcat主缓冲区超出定义大小
- 套接字读取后,我在缓冲区中看到意外输入
- std::带有自定义缓冲区的 iostream 不允许我写入
- 从返回的顶点缓冲区查询顶点结构
- Vulkan 中的动态顶点缓冲区格式设置
- OpenGL 16 位模板缓冲区?
- 在 leetcode 上提交解决方案时出现堆栈缓冲区溢出错误
- 静态分析,用于检测 Visual Studio C++ 2012 上的缓冲区溢出
- 为什么在Visual Studio 2012上的代码分析中,此代码会发出缓冲区溢出警告(C6385/C6386)