私はバグのあるプログラムを作成しました - buggy.c - これはバッファ t のバッファ オーバーフロー シナリオです。5 つ以上のインデックスを書いていることがわかります。それは正常に動作します。エラーが発生することはありません。ふと思ったのですが、どうしてこうなったのでしょう?Valgrindでも試しましたが、これもこの問題を見つけることができませんでした。ここで何が問題なのか教えてください。
void buffer_overflow(void)
{
int t[5];
int i = 0;
for(i = 0; i<=7; i++)
{
t[i] = i;
}
/** this will cause buffer overflow **/
printf("Memory_overflow_completed\r\n");
}
int main(int argc, char **argv)
{
buffer_overflow();
return 0;
}
$gcc -g buggy.c -o buggy.out -lefence
$./buggy.out
ただし、クラッシュは発生しません。ここでは電気柵の効果はありません。私は何が欠けていますか?ここに投稿された同様の質問を見ましたgcc with electric fence library does not take effectですが、まだ回答がないようです。この例を FC19 で実行しています。誰もそれに対する答えを持っていますか?valgrind でさえ問題を検出できませんか? これらの問題を検出する他のツールはありますか?
さらなるコメントに基づいて、Electric Fence によって検出されるようにバッファ オーバーフロー関数を修正しました。ただし、Electric Fence は問題を検出できません。これが変更された関数です。
void buffer_overflow(void)
{
#if 0
int t[5];
int i = 0;
for(i = 0; i<=7; i++)
{
t[i] = i;
}
#endif
char *t = malloc(sizeof(char)*7);
strcpy(t,"SHREYAS_JOSHI");
/** this will cause buffer overflow **/
printf("Memory_overflow_completed\r\n");
free(t);
}
[joshis1@localhost blogs-tune2wizard]$ gcc -g buggy.c -o buggy.out -lefence
[joshis1@localhost blogs-tune2wizard]$ ./buggy.out
Electric Fence 2.2.2 Copyright (C) 1987-1999 Bruce Perens <bruce@perens.com>
Memory_overflow_completed
Electric Fence では検出されたエラーはありませんが、Valgrind では少なくともエラーが表示されました。