数日前にバッファ オーバーフローの検出について質問しました ( 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 では検出されません。さらに、 AddressSanitizer ( Windows ) で clang を使用しようとしましたが、良い結果も得られませんでした。
Windows でこのような問題を防ぐことはできますか (できれば無料のツール)。