글

9월, 2026의 게시물 표시

ELF 구조부터 로딩까지

ELF format ELF(Executable and Linking Format)는 실행 가능한 코드를 위한 표준화된 파일 형식이다. ELF는 주로 실행 파일(ET_EXEC)이나 공유 라이브러리(ET_DYN) 에 사용된다. 현재 거의 모든 현대적인 Unix 계열 운영체제는 ELF 의 이식성, 표준화된 기능, 처음부터 깔끔하게 설계된 구조 덕분에 ELF 형식을 지원한다. ELF 표준의 실제 버전은 1.2 이다. ELF 표준을 다루는 여러 문서가 있으며 자세한 내용은 Tool Interface Standard, Executeable and Linking Format, Version 1.2 를 참고하면 된다. ELF 바이너리 형식은 다음 두가지 요구사항을 모두 만족하도록 설계되었다. linker : 일반적으로 컴파일 과정에서 사용된다. loader : 일반적으로 프로그램 실행 시점에서 사용된다. 이 두가지 요구사항을 만족하기 위해 ELF 바이너리 파일 내부의 데이터를 설명하는 서로 구별되는 두가지 인터페이스가 포함되었다. 이 두 인터페이스는 서로 의존하지 않는다. ELF headers ELF 파일은 최소한 ELF header를 반드시 포함해야 한다. ELF 헤더에는 바이너리 파일의 내용을 어떻게 해석해야 하는지에 대한 정보와 바이너리를 설명하는 다른 구조체들이 파일의 어디에 위치하는지에 대한 정보가 들어있다. ELF 헤더는 파일 내부의 offset 0에서 시작하며 다음과 같은 형식을 가진다. #define EI_NIDENT (16) typedef struct { unsigned char e_ident[EI_NIDENT]; Elf32_Half e_type; Elf32_Half e_machine; Elf32_Word e_version; Elf32_Addr e_entry; Elf32_Off e_phoff; Elf32_Off e_shoff; } Elf32_Ehdr; [e_ident] e...