ELF 파일 형식

ELF(Executable and Linkable Format)는 실행 파일, 목적 파일, 공유 라이브러리 그리고 코어 덤프를 위한 표준 파일 형식이다. 1999년 86open 프로젝트에 의해 x86 기반 유닉스, 유닉스 계열 시스템들의 표준 바이너리 파일 형식으로 선택되었다.

파일 레이아웃 
각 ELF 파일은 하나의 ELF 헤더와 파일 데이터로 이루어진다. 파일 데이터는 다음을 포함한다.
 0개 또는 그 이상의 세그먼트들을 정의하는 프로그램 헤더 테이블
 0개 또는 그 이상의 섹션들을 정의하는 섹션 헤더 테이블
 프로그램 헤더 테이블 또는 섹션 헤더 테이블의 엔트리들에 의해 참조되는 데이터
섹션들이 링킹과 재배치에 필요한 중요한 정보를 포함하는 반면, 세그먼트들은 파일의 런타임 실행에 필요한 정보를 포함한다. 전체 파일의 어떤 바이트도 최대 한 개의 섹션에 의해 소유될 수 있으며 어떠한 섹션에 의해서도 소유되지 않은 고아 바이트들이 존재할 수 있다.

파일 헤더 
ELF 파일 헤더는 32비트 또는 64비트 주소들이 사용되어야 하는지를 정의한다.

도구 
 readelf는 하나 이상의 ELF 파일들에 대한 정보를 보여주는 유닉스 바이너리 유틸리티이다.
 elfutils는 순수하게 리눅스를 위한 대체 도구들을 제공한다. 
 elfdump 는 ELF 파일에서 ELF 정보를 보기 위한 명령어로서 솔라리스와 FreeBSD에서 사용 가능하다.
 objdump는 ELF 파일들과 다른 목적 포맷들에 대한 많은 정보를 제공한다. objdump는 ELF 데이터를 구조화하기 위해 바이너리 파일 디스크립터 라이브러리를 백엔드로서 사용한다.
 유닉스 file 유틸리티는 코드의 명령어 집합을 포함한 ELF 파일들에 대한 몇몇 정보를 보여줄 수 있다.

적용 
ELF 형식은 다양한 환경들에서 오래된 실행 파일 포맷을 대체했다. 이것은 유닉스 계열 운영체제에서 a.out과 COFF 포맷을 대체하였다.
 리눅스
 솔라리스
 IRIX
 FreeBSD
 NetBSD
 OpenBSD
 DragonFly BSD
 Syllable
 HP-UX
 QNX Neutrino
 미닉스
ELF는 또한 유닉스 계열이 아닌 운영체제에서도 채택되었다.
 OpenVMS, 아이테니엄 버전에서
 BeOS Revision 4와 이후의 x86 기반 컴퓨터
 하이쿠
 RISC OS
 Stratus VOS, PA-RISC와 x86 버전들에서
몇몇 게임 콘솔들도 또한 ELF를 사용한다.
 플레이스테이션 포터블, 플레이스테이션 비타, 플레이스테이션 2, 플레이스테이션 3, 플레이스테이션 4
 GP2X
 드림캐스트
 닌텐도 게임큐브, Wii, Wii U

각주 

실행 파일 포맷