ELF 파일의 3가지 핵심 구성 요소

edward·2025년 10월 16일

ELF(Executable and Linkable Format) 파일은 리눅스 계열 운영체제에서 표준으로 사용하는 오브젝트 파일 포멧으로, 링킹 및 로딩에 필요한 모든 정보를 논리적으로 구조화하여 담고 있으며, 크게 세 가지 요소로 이루어져 있습니다.

1. ELF 헤더 (ELF Header)

  • 역할: 파일의 맨 앞에 위치하며, ELF 파일 전체를 이해하기 위한 가장 기본적인 정보를 제공합니다. 파일의 '신분증'과 같습니다.
  • 포함 정보: 파일의 종류(재배치 가능, 실행 가능 등), 대상 CPU 아키텍처, 엔디안(바이트 순서), 섹션 헤더 테이블과 프로그램 헤더 테이블이 파일 내에서 시작하는 위치(오프셋) 및 크기 등.

2. 섹션 데이터 (Section Data)

  • 역할: 프로그램의 실제 내용물이 들어 있는 부분입니다.
  • 구성: .text (코드), .data (초기화된 데이터), .rodata (읽기 전용 데이터) 등 앞서 설명된 모든 섹션의 실제 바이트 데이터가 저장됩니다.

3. 메타데이터 테이블 (Metadata Tables)

ELF 파일은 데이터를 해석하는 데 필요한 두 가지 중요한 테이블을 포함합니다.

  • 섹션 헤더 테이블 (Section Header Table): 섹션 데이터 영역에 있는 각 섹션의 상세한 정보 (이름, 타입, 크기, 파일 오프셋, 메모리 주소 등)를 담고 있는 목록입니다. 링커가 파일을 처리할 때 주로 사용합니다.
  • 프로그램 헤더 테이블 (Program Header Table): (주로 실행 파일에서 중요) 파일이 메모리에 로드될 때 어떻게 로드되어야 하는지를 설명합니다. 파일의 연속된 섹션들을 묶어 세그먼트(Segment)라는 단위로 메모리 매핑 정보를 제공합니다. 로더(Loader)가 파일을 메모리에 올릴 때 주로 사용합니다.

따라서 ELF 파일은 헤더를 통해 파일의 시작점을 알리고, 테이블을 통해 파일의 구조와 로딩 방법을 정의하며, 데이터에 실제 프로그램을 담는 구조를 가집니다.

profile
there ain't no shortcuts

0개의 댓글