{
char bufBef[32];
char buf[8];
char bufAfter[32];
sprintf(buf,"AAAAAAA\0");
buf[8]='\0';
printf("%s\n",buf);
}
Windows 7では、Visual Studio 2008でデバッグプロジェクトとしてプログラムをコンパイルしました。 3つのバッファが隣接している。私は以下のように、デバッガを使用してそれらのアドレスを見つける:ランタイムはバッファオーバーフローをどのように検出しますか?
bufBef 0x001afa50
buf 0x001afa40
bufAfter 0x001afa18
声明 "BUF [8] = '\ 0' が" BUFのうちのアドレスを書き込みます。私がプログラムを実行すると、オペレーションシステムは「デバッグエラー:ランタイムチェック失敗#2 - 変数 'buf'の周りのスタックが壊れていた」と報告しました。
その後、リリースプロジェクトとしてコンパイルしました。静かに実行され、エラー報告は発生しません。
私の質問は、どのようにランタイムバッファオーバーフローを検出ですか?
恐ろしい書式設定(やや) – abelenky
ありがとうございました! – remainn
正確な重複(同じユーザー):[実行時にバッファオーバーフローが検出される方法](http://stackoverflow.com/questions/4282628/how-run-time-detects-buffer-overflow)またおそらく[sprintf関数のバッファオーバーフロー?](http://stackoverflow.com/questions/4282281/sprintf-functions-buffer-overflow)も参照してください。 –