2015-02-01 1 views
2

안녕하세요. 아무도 내게 여기에서 무슨 일이 일어나는지 힌트를 줄 수 있습니까? gcc 랩 옵션으로 재생하는 동안 segfaulting

#include <stdlib.h> 

void __wrap_exit(int code) 
{ 
    return; 
} 

int main(int argc, char *argv[]) 
{ 
    exit(5); 
    return 0; 
} 

컴파일 : gcc main.c -g -Wl,--wrap=exit

나는 프로그램을 디버깅 시도하고 인쇄 :

Program received signal SIGSEGV, Segmentation fault. 
0x00007fffffffde88 in ??() 
(gdb) n 
Cannot find bounds of current function 

내가 개방과 유사한 실험을 시도()과 멋지게 일을하기 전에. exit()에서 재미있는 컴파일러 최적화를 피하기 위해 -O0으로 컴파일하려고 시도했지만 효과가없는 것 같습니다.

감사합니다.

답변

1

남자들은 무슨 일이 일어나고 있는지 발견하기 위해 나이가 들었습니다.

가끔 내 gcc가 필요하지 않을 때 너무 똑똑하다는 의견이 있습니다. 이 경우에는 builtin으로 exit을 처리하고 대신 일반 C 함수로 간주합니다.

extern void exit(int code); 

void __wrap_exit(int code) 
{ 
    return; 
} 

int main(int argc, char *argv[]) 
{ 
    exit(5); 
    return 0; 
} 

이들은 결과 다음과 같습니다 :

가 여기 내 test.c입니다 그것으로 찾고에 대한

$ gcc -fno-builtin -otest test.c -Wl,--wrap=exit 
$ ./test; echo $? 
0 
$ gcc -fno-builtin -otest test.c 
$ ./test; echo $? 
5 
+0

감사합니다, 트릭을 할 것 같다! – arik

관련 문제