티스토리 뷰
목차
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 파일 헤더 구조
.bss section
- 프로그램이 실행될 때, 초기화 되어 있지 않지만, static이나 전역으로 선언된 변수가 위치하는 곳
.symtab
- 함수, 전역 변수, section의 이름 등이 저장된 영역
- ELF 파일의 이 정보는 링커나 사람에게 필요한 정보이다
.rel.txt
- 동적 라이브러리의 경우 라이브러리의 코드가 여러 응용 프로그램의 메모리 영역에 연결되는데, 이때, 항상 같은 주소로 연결되지 않는다. 주소가 바뀔 때마다 .text section에서 변경되어야 할 정보를 저장하고 있음
.rel.data
- 동적 라이브러리의 경우 라이브러리의 코드가 여러 응용 프로그램의 메모리 영역에 연결되는데, 이때, 항상 같은 주소로 연결되지 않는다. 주소가 바뀔 때마다 .data section에서 변경되어야 할 정보를 저장하고 있음
.debug section
- 디버거에서 필요한 정보를 가지고 있음
- gcc 컴파일러에서 –g 옵션을 주면 이 부분에 gdb와 같은 디버거에서 필요로 하는 정보를 이 부분에 생성
위치 재설정의 개념
ELF 위치 재설정의 개념
ELF 파일이란, 구조, 포맷, 분석, 생성 원리 (리눅스 커널 2.2 부터 지원)