2014-03-05 3 views
1

메모리 누수를 찾는 데 사용되는 .so 파일이 있습니다. 목표 바이너리를 실행하고자하는 세션에서 LD_PRELOAD env 변수를 설정합니다. export LD_PRELOAD=./memleakfinder.so 하지만이 환경 변수가 설정되면 ls 또는 ps과 같은 간단한 Linux 명령도 Segmentation fault (core dumped)을 발생시킵니다. 그 이유는 무엇입니까? .so 파일에 malloc(), calloc(), realloc(), free(), new, new[] 등의 오버로드 된 버전이 있습니다. CentOS6의 자동 버그보고 도구는 다음과 같습니다 : source:coreutils Problem:process /bin/ls was killed by signal 11(SIGSEGV). 라이브러리 주입이 여기에서 문제를 일으키는 것은 분명합니다. 어떻게 피할 수 있습니까?LD_PRELOAD가 Linux 명령의 세그먼트 오류를 ​​일으켰습니다.

+3

** 제대로 ** 이러한 기능을 구현 했습니까? –

+1

gdb를 사용하여 코어 덤프를 검사하고 충돌 지점에서 스택 추적을 확인하십시오. – harmic

+1

전체 시스템에서 실행하기 전에 함수를 호출하고 테스트하는 테스트 프로그램을 작성하십시오. –

답변

0

환경 변수를 내보내는 대신 실행/디버그 할 명령 앞에 변수를 추가하십시오.

예를 들어

:

LD_PRELOAD=./memleakfinder.so a.out 

을 그리고 도서관은 대신 현재 쉘의 모든 명령은 a.out이 하나의 호출을 위해로드됩니다.

일부 코드를 보지 않고도 세분화 오류의 원인을 파악하는 데 도움을 줄 수 없습니다.

관련 문제