libc 버전 문제
libc.so 파일을 실행하면 버전, 컴파일 시스템 등등 정보가 출력된다.
* glibc source는 하나지만, 컴파일 환경(OS, Compiler)에 따라 같은 버전의 다른 libc.so가 컴파일된다. * libc 버전에 따라 에러가 발생하는 경우는 확인했는데, 같은 버전에 시스템이 다른 경우(e.g., Debian과 Ubuntu) 에러가 발생하는건 아직 못봤다.
#1
바이너리를 컴파일한 시스템의 libc 버전과 바이너리를 실행하는 현재 시스템에서 사용하는 libc 버전이 다른 경우 relocation error가 발생할 수 있다.
#2
현재 시스템에서 사용하는 libc 버전과는 다른 버전의 libc를 LD_PRELOAD
를 이용해 지정해 실행하는 경우, relocation error가 발생하거나 startup routine에서 fault가 발생할 수 있다.
core dump 생성하고 bt해보면 \_\_libc\_start_main
까지는 가는 걸로 나오는데 여기든 그 이전이든 아무리 bp걸고 실행해봐도 startup 도중 fault가 발생했다며 실행이 안된다. 이런 정황들로 추측해봤을 때 startup routine 중 falut가 발생하는 게 맞는 것 같다. 그렇게 되면 당연히 디버깅도 불가능한게, Entry point 이전 startup routine이 끝나야 디버거에 적재되기 때문에… startup routine은 바이너리에 static하게 들어가는 줄 알았는데, libc 버전 따라 fault가 발생하기도 하는 걸 보면 libc도 참조하는 듯.
This post is licensed under CC BY 4.0 by the author.