几天前我问了一个关于缓冲区溢出检测的问题(sprintf 缓冲区全局数据溢出 - 如何检测它,Windows),问题只能通过标准功能的 cppcheck 解决(不安全 _s 版本)。
我更深入并更改了代码
#include <stdio.h>
char buffer[2];
void main()
{
sprintf(buffer,"12345");
}
至
#include <stdio.h>
void f( char *b )
{
sprintf(b,"12345");
}
char buffer[2];
void main()
{
f( buffer );
}
Visual Studio 2012 /RTC 可以在运行时处理堆栈分配的缓冲区溢出,但全局数据不会被检测到。
我想不可能使用 cppcheck 进行深入分析,并且 cppcheck-1.64 没有检测到这个问题。此外,我还尝试将 clang 与 AddressSanitizer ( Windows ) 一起使用,但效果不佳。
是否可以在 Windows 下防止此类问题(最好是免费工具),如果不能,也许一些 linux 工具可以提供帮助?