티스토리 뷰
동적, 정적 라이브러리 차이점에 대해서 알아보기로 하자.
정적 라이브러리는 프로그램과 같이 컴파일 & 링크 되어 실제 오브젝트 파일 내에 포함 되어서 실행 되는 라이브러리이다. 라이브러리와 프로그램이 합체되기 때문에 정적 라이브러리와 링크 하면 프로그램 용량이 늘어나는 현상을 볼 수 있다. 프로그램과 합체가 되면 속도는 빨라지지만 단점도 생기는데 라이브러리가 업데이트 되었을 때 그 라이브러리를 사용한 프로그램의 업데이트가 쉽지 않다. 이래서 DLL이라고 불리우는 동적 라이브러리가 탄생하게 되었는데 프로그램에 합체 된 정적 라이브러리를 밖으로 꺼내 놓기 시작했다. 이게 바로 동적 라이브러리이다. 이러면 아주 편하게 수정 & 배포를 할 수 있으리라 생각 했겠지만 속도가 느려지는 단점이 있다.
아래 프로그램으로 어떻게 동작하는지, 어떤 동적 라이브러리가 있는지를 들여다 보자. ㅂ면 printf는 glibc에 포함된 동적 라이브러리이다. 이 외에 전역변수도 몇 개 존재한다.
자 이제 nm명령어를 사용하여 어떤 심볼들이 쓰였는지 들여다보자.
숫자 알파벳 심볼명으로 이루어진 것을 볼 수 있다.
숫자는 가상 주소이고, 알파벳은 심볼 특징(?), 마지막은 심볼명을 의미한다.
T : Text 영역(code)
U : 정의 안된 심볼
B : 초기화 안된 데이터(BSS)
D : 초기화 된 데이터
R : Read only data
자 여기서 중요한건 U로 표시된 undefined 심볼이다. 가상 주소도 안 쓰여져 있고... 동적 라이브러리와 관련좀 있는 것으로 추정된다. 그 외에 전역 변수로 지정한 gVal~ 변수들은 B로 되어있는 것을 볼 수 있다. 여기서 gValInit은 0으로 초기화 되어있는데 0으로 초기화 된 것들도 BSS 영역으로 갑니다. 만약 gValInit 변수에 100을 넣으면 D라고 표시된다.
readelf -a 파일명 을 쳐서 더 들여다 보았을 때 Entry Point Address가 나오는데 gdb를 할 때 여기서 뜯어 보면 되겠다. 그리고 좀 더 내려서 Dynamic section 부분으로 내려오면
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libc.so.6]
이런 부분이 보이게 된다. 정적 라이브러리와 다르게 동적 라이브러리는 실행 프로그램에 포함 되는 것이 아니라고 했다. 그러면 정적 라이브러리 같이 합체 되는 것도 아닌데 어떻게 이 프로그램이 동적 라이브러리와 연관이 지어지느냐 답은 이 부분이다. 컴파일러가 "이 프로그램은 이런이런 라이브러리를 사용 합니다." 라고 NEEDED 로 실행 파일에 적어 놓는다. 로더가 "아~ 이 프로그램은 이런 라이브러리를 사용하는군..." 이라고 생각하게 되고 이 정보를 어떻게든 참고해서 프로그램 런타임시에 사용될 것이라고 생각된다.
다른 분꺼 보면서 공부할 때도 상당히 버벅 거렸는데 정리하면서도 버벅거린다... 암튼 이번 편은 여기까지 하는 걸로...
'System > PLT&GOT' 카테고리의 다른 글
GOT Overwrite - 1 (0) | 2012.09.14 |
---|---|
PLT, GOT (0) | 2012.08.30 |
PLT&GOT에 대해서... (0) | 2012.08.30 |
- Total
- Today
- Yesterday
- #FTK
- #Pmem
- #WireShark
- #WinPmem
- #Forensic
- #Forensic Tools
- #크롬
- #GRR
- #ReKall
- blockchain
- #포렌식
- #EnCase
- #WinHex
- #이미지 수정
- #수정
- #tcpdump
- #010 Editor
- Fin Tech
- #tool
- #디지털 포렌식
- #Volatility
- #DEFT
- ethereumj
- #캐시
- 이더리움
- ethereum
- #Chrome
- #메모리
- #Security
- 4차 산업혁명
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |