Executable and Linkable Format
ELF는 유닉스 계열 운영체제의 실행, 오브젝트 파일, 공유 라이브러리, 또는 코어 덤프를 할 수 있게 하는 바이너리 파일이다. 간단히, 실행 파일이다. 원래 뜻은 Extensible Linking Format 이라는 뜻을 가지고 있었다.
ELF header - 실행파일에 대한 정보를 담는다.
Program header table -
.text - 코드가 들어간다. 주로 push rax, mov [rsp - 4], rdi, int 0x80 과 같은 명령이 있다. 물론, 바이너리이다(...)
.rodata - read-only Data Segment. 읽기만 가능한 데이터 부분이다.\
char s[] = "hello world"; 주로, 이런 코드가 이부분에 들어간다.
주로, static, const 값들이 이곳으로 온다.
.data - 데이터들이 있다. 예를 들어, Hello, World! 프로그램이라면, Hello, World! 하는 문자열이 저장되어 있다. 보통 .text의 명령어가 이 문자열을 불러 온다. .rodata와의 차이점은, 이 부분은 읽고 쓸수있다.
Section Header Table -
Program header(Phdr) - 실행 가능한(또는 공유된) object file의 프로그램 헤더 테이블은 시스템이 프로그램을 실행을 위해 필요로하는 각각의 세그먼트나 다른 정보들을 담은 structure들의 배열이다.
https://man7.org/linux/man-pages/man5/elf.5.html
흐름 -