ELF 란 용어를 많이 들어보셨을텐데요, ELF는 Executable and Linking Format의 약어입니다. UNIX / LINUX 기반에서 사용되는 실행 및 링킹 파일 포맷입니다. 지난 글에 이어 이번 글에서는 Stripping ELF 에 대해 알아보겠습니다.
[이전 글]
2018/08/27 - [Linux/Debugging & Testing] - [ELF] ELF Header
2018/08/29 - [Linux/Debugging & Testing] - [ELF] Segment와 Program Header
2018/09/07 - [Linux/Debugging & Testing] - [ELF] Sections and the Section header table
- Strip (?)
가장 먼저 표시되는 사전적 의미가 옷을 벗다... 라고 하네요 ^^; 그럼 ELF file을 strip 시킨다는건 무슨 의미일까요? ELF의 옷을 벗기는걸까요? 그럼 ELF의 옷은.. 무엇일까요? 좀 더 고민해 보시면 ELF 파일에서 특정 데이터를 벗겨서(?) 제거하는 의미임을 추측하실 수 있으실 겁니다. 그럼 도대체 어떤 정보를 제거하고, 제거한 후에는 어떻게 되는지 살펴보겠습니다.
모든 ELF object 들은 Strip될 수 있습니다. 여기서 제거되는 정보는 실행 중에 필요치 않은 정보들, 즉 런타임에 필요로 하지 않은 Main symbol table과 section들이 삭제될 것 입니다. 만약 런타임에 필요한 정보들이 제거되면.. 제대로 동작하지 않겠죠? 그런 정보들이 무엇일까요?
리눅스 배포판에는 strip이란 명령어가 있습니다. man strip으로 확인하면 아래와 같은 설명이 나옵니다.
discard symbols from object files
그럼 strip 전과 후 어떤 section들이 사라졌는지 readelf 툴로 확인해봅시다!
위가 Strip 전이고 아래가 strip 이후의 section들을 보여주고 있습니다. 뭔가 줄어든것 같은 느낌이 확 드시나요? 이렇게 보니 잘 안보이네요. 표로 정리된 내용을 살펴보죠.
strtab과 symtab 섹션이 strip 이후에 사라졌습니다.!! 저 2개의 section에 어떤정보들이 있었는지 기억하시나요? 다시 한번 리마인드 겸 Section 관련 글에서 가지고 와보겠습니다.
- .strtab
- Main symbol table을 위한 심볼 이름들이 위치하고 있는 섹션 - .symtab
- 모든 정적 함수와 변수를 포함한 모든 Symbol table의 정보가 위치하는 섹션
String Format의 정보들이 사라져보리는군요. String Format은 사람이 읽을 수 있는 Format으로 실제 실행중에는 필요없는 정보입니다. 하지만 이 정보들은 문제 발생 시 디버깅 할 때 매우 유용하게 사용되는 섹션들입니다 ^^ 이렇게 섹션을 Strip하여 지워버리면 당연히 ELF 파일의 사이즈도 줄어들겠죠? 정말 줄어드는지는 직접 해보시면 좋을 것 같습니다.
이번 글은 여기서 짧게 끝을 맺으려 합니다. 감사합니다.
[참고자료]
Tool Interface Standards – Portable Formats Specification, Version 1.1
Self-Service Linux , MarkWilding and Dan Behman
How To Write Shared Libraries, Ulrich DrepperLinking, Randy Bryant and Dave O’Hallaron
https://en.wikipedia.org/wiki/Executable_and_Linkable_Format
http://man7.org/linux/man-pages/man5/elf.5.html
http://egloos.zum.com/recipes/v/5010841
http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
https://en.wikipedia.org/wiki/Weak_symbol
'Linux > Debugging & Testing' 카테고리의 다른 글
[objdump] symbol table column 의미 (0) | 2019.08.21 |
---|---|
[ELF] Symbol Resolution (2) | 2018.09.09 |
[ELF] Sections and the Section header table (0) | 2018.09.07 |
[ELF] Segment와 Program Header (1) | 2018.08.29 |
[ELF] ELF Header (0) | 2018.08.27 |