본문 바로가기
C++ 200제/코딩 IT 정보

ELF 파일이란, 구조, 포맷, 분석, 생성 원리 (리눅스 커널 2.2 부터 지원)

by vicddory 2017. 1. 30.

ELF 파일이란, 구조, 포맷, 분석, 생성 원리 (리눅스 커널 2.2 부터 지원)


Executable and Linkable Format (ELF 파일)


ELF

- AT&T System V Unix 시스템에서 개발

- 리눅스를 포함하여 거의 모든 UNIX계열의 Object 파일 및 실행 파일 표준 binary format

- 리눅스 커널도 2.2 버전으로 오면서 ELF 파일 포맷을 지원하며, 커널의 이미지도 ELF 형태로 만들 수 있음


ELF Header

- ELF 파일 포맷임을 표시하는 magic number, 이미지의 형태(.o, exec, .so)

- 실행되는 CPU 정보, Little-endian인지 Big-endian인지 표시하는 Byte 순서와 같은 파일 내용의 기본적인 정보 포함


Program Header Table

- 실행 파일의 메모리 구조 내용을 표시

- EFL에서는 segment로 알려진 영역을 section으로 정의

- 이 테이블에서는 어떠한 section이 존재하고 그 section의 정보가 있는 곳을 가지고 있음


.text section

- 실제로 CPU에서 수행되는 이진 기계 코드가 저장된 영역


.data section

- 프로그램이 실행될 때, 이미 초기화되어 있는 ELF 파일의 Data가 저장되어 있는 영역


ELF 헤더 구조ELF 파일 헤더 구조


.bss section

- 프로그램이 실행될 때, 초기화 되어 있지 않지만, static이나 전역으로 선언된 변수가 위치하는 곳


.symtab

- 함수, 전역 변수, section의 이름 등이 저장된 영역

- ELF 파일의 이 정보는 링커나 사람에게 필요한 정보이다


‰ .rel.txt

- 동적 라이브러리의 경우 라이브러리의 코드가 여러 응용 프로그램의 메모리 영역에 연결되는데, 이때, 항상 같은 주소로 연결되지 않는다. 주소가 바뀔 때마다 .text section에서 변경되어야 할 정보를 저장하고 있음


.rel.data

- 동적 라이브러리의 경우 라이브러리의 코드가 여러 응용 프로그램의 메모리 영역에 연결되는데, 이때, 항상 같은 주소로 연결되지 않는다. 주소가 바뀔 때마다 .data section에서 변경되어야 할 정보를 저장하고 있음


.debug section

- 디버거에서 필요한 정보를 가지고 있음

- gcc 컴파일러에서 –g 옵션을 주면 이 부분에 gdb와 같은 디버거에서 필요로 하는 정보를 이 부분에 생성


위치 재설정의 개념


ELF 위치 재설정의 개념ELF 위치 재설정의 개념


ELF 파일이란, 구조, 포맷, 분석, 생성 원리 (리눅스 커널 2.2 부터 지원)

댓글