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도 참조하는 듯.
'OS > LINUX & UNIX' 카테고리의 다른 글
SSH 접속 끊어도 프로세스 돌아가도록 하기 : screen, disown, 백그라운드 작업 (1) | 2017.11.13 |
---|---|
gcc options (2) | 2017.10.01 |
SSH Server 설정 (0) | 2017.05.22 |
STDIN _IO_FILE structure <_IO_2_1_stdin_> & fgets VS argv (0) | 2017.05.09 |
[*-nix] 패키지 관련 및 OS update & upgrade (0) | 2017.04.13 |