Linuxias
Developer's Delight
Linuxias
  • Category
    • AI
      • Deep Learning
      • Machine Learning
      • Data Science
      • Framework
      • MLOps
      • Paper-Review
      • Tips
    • Android
      • Kotlin
      • Component
      • Compose
      • Compose UI
      • Material
      • Testing
    • Software Architecture
      • Architecture Pattern
      • Design Pattern
      • Requirement Engineering
    • Linux
      • Compile & Link
      • Command & Tool
      • Container
      • Debugging & Testing
      • Profiling
      • Kernel Analysis
      • Server
      • Shell Script
      • System Programming
    • Language
      • Carbon
      • C,C++
      • C#
      • Java
      • Python
    • ETC
      • Data Struct | Algorithm
      • git
      • Security
    • Book
    • 경제공부
      • 세금
      • 부동산
hELLO · Designed By 정상우.
Linuxias

Developer's Delight

[ELF] Stripping an ELF object
Linux/Debugging & Testing

[ELF] Stripping an ELF object

2018. 9. 9. 16:58
반응형

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 파일을 Strip 하는 것에 대해 알아보려 하는데요, 먼저 Strip이 무엇인지 부터 정의하고 넘어가야 할 것 같습니다. Strip에 대한 사전적 의미부터 살펴보죠. Naver에서 검색한 내용입니다.

가장 먼저 표시되는 사전적 의미가 옷을 벗다... 라고 하네요 ^^; 그럼 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
    'Linux/Debugging & Testing' 카테고리의 다른 글
    • [objdump] symbol table column 의미
    • [ELF] Symbol Resolution
    • [ELF] Sections and the Section header table
    • [ELF] Segment와 Program Header
    Linuxias
    Linuxias
    I want to be a S/W developer who benefits people.

    티스토리툴바