System Hacking/Study Notes

LD 와 libc.so.6

S!_Jmini 2019. 12. 29. 15:54

# LD ? 

 

 

 

 

 

파일마다 libc 를 로드하는데 있어서 버전마다 이름이 다르면 호환성이 떨어진다

 

그래서 모든 파일은 libc.so.6 과 ld-linux-x86-64.so.2 라는 이름의 libc파일과 ld 링커를 로드한다

 

이 때 libc.so.6 과 ld-linux-x86-64.so.2 는 심볼릭 링크가 걸려있어서 

 

상황에 따라 다른 libc를 참조할 수 있다

 

 

여기서 ld 는 libc.so.6 의 함수(라이브러리)들을 가져오는 역할을 하는데

 

init 함수에서 libc 로드하는 과정에 stack으로 push 되는 루틴이 있다

 

그래서 가끔 stack에 ld 주솟값이 남아 있는 경우가 보인다

 

 

 

 

 

# 어떻게 적용할까?

 

포너블 문제를 풀 때 종종 binary 뿐만 아니라 libc 파일도 주어지는 경우가 있다

 

이 경우에 libc 파일을 어떻게 적용해야 할까?

 

LD_PRELOAD 설정

 

위와 같이 적용하면 기본적으로 설정되어있는 libc파일을 참조하지 않고

 

env 로 설정되어있는 libc를 로드하여 문제에 주어진 라이브러리의 함수들을 이용할 수 있다