버그가있는 프로그램 (buggy.c)을 만들었습니다. 이것은 버퍼 t에 대한 버퍼 오버 플로우 시나리오입니다. 5 개 이상의 색인을 작성하고 있음을 알 수 있습니다. 그것은 잘 작동합니다. 결코 저에게 오류를 던지지 않습니다. 궁금 해서요, 왜 그렇게 생각하니? 나는 Valgrind조차 시도했다, 이것 또한이 문제점을 찾아 낼 수 없었다. 여기서 문제가 뭔지 말해 줄 수 있어요?Electric fence/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는 문제를 감지 할 수 없습니다. 다음은 수정 된 함수입니다.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);
}
[[email protected] blogs-tune2wizard]$ gcc -g buggy.c -o buggy.out -lefence
[[email protected] blogs-tune2wizard]$ ./buggy.out
Electric Fence 2.2.2 Copyright (C) 1987-1999 Bruce Perens <[email protected]>
Memory_overflow_completed
전기 울타리에서는 오류가 감지되지 않지만 Valgrind atleast에서는이를 나타냅니다.
이 오류가 발생합니다 - joshis1 @ (none) temp] $ gcc -g ef.c -o ef.out -fsanitize = address cc1 : 오류 : 인식 할 수없는 명령 줄 옵션 '-fsanitize = address' 사용할 수있는 gcc 버전? –
내 gcc 버전은 [joshis1 @ (없음) 임시 직원] $ gcc --version gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2) Copyright (C) 2011 자유 소프트웨어 재단 자유 소프트웨어입니다. 복사 조건에 대한 소스를 참조하십시오. 아무런 보증이 없습니다; 상품성 또는 특정 목적에의 적합성을 보장하지 않습니다. –
죄송합니다. 명시 적으로 '현재'버전을 언급하는 것을 잊었습니다. gcc [4.8 버전부터] (http://gcc.gnu.org/gcc-4.8/changes.html)와 적어도 3.1 버전의 clang에서 지원되는 것으로 보입니다. – v154c1