2012-05-04 4 views
2

glibc를 수정하고 싶습니다. 그래서 나는 그것의 버전을 다운로드했고 코드를 약간 변경했다. 예를 들어 memset을 변경했습니다. 그러나 LD_PRELOAD를 수행하지 않을 때와 비교하여 (LD_PRELOAD를 사용하여) 컴파일로 생성 된 .so 파일을 사용하면 어떤 차이점도 나타나지 않습니다. memset은 마치 동작합니다. 왜 이렇게이다? 아마도 컴파일러가 memset을 인라이닝하고 공유 객체에서 아무 것도 사용하지 않는 것입니까? 나는 이것을 이해하지 못한다. 나는 심지어 printf를 변경했지만 여전히 아무것도하지 않았다. 왜 이렇게이다. glibc (테스트 목적)를 수정하여 변경 사항을 볼 수 있습니까?glibc 변경 중 아무 반응이 없음

또한, 해당 기능의 시작 부분에 printf("pthread_create")을 도입하여 pthread_create (및 LDPCRELOAded libpthread.so)를 변경하려고 시도했을 때 세그먼트 화 오류가 발생했습니다. 여기서 무슨 일이 일어나고있는거야? 또한 glibc 소스에서 변경 한 후 libc.so의 차이점을 확인하면 생성 된 버전에 차이가 없음을 알 수 있습니다. 여기서 무슨 일이 일어나고 있는지. 이것은 나를 미치게합니다!

+0

나는 glibc를 정적으로 연결함으로써 마침내 벗어났습니다! 휴! – pythonic

답변

4

GCC는 memset()printf()을 포함하여 several functions의 기본 제공 버전을 제공합니다. glibc가 이러한 함수를 구현하는 것과 연결되지 않습니다.

이 문제를 방지하려면 -fno-builtin 컴파일러 옵션을 전달해보십시오.

관련 문제