我创建了一个有问题的程序 - 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 withelectric fence library does not take effect,但似乎还没有答案。我在 FC19 上运行这个例子。有人有答案吗?甚至 valgrind 都无法检测到问题?有没有其他工具可以检测这些问题?
根据进一步的评论,我修改了缓冲区溢出功能以被 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 至少显示了它。