⭐️ 7.4. Relocatable Object Files (ELF File Format)
DUMP
- ELF Header
- magic byte:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
- magic byte 16바이트로 시작을 하는데, 그 안에는 얘가 ELF이다 라는
7f
와 함께 워드크기, 바이트 정렬의 정보를 담고있다.
- 그 뒤에는 링커가 목적파일을 읽을 때 사용되는 ELF Header 자체의 크기, 목적파일의 타입, 아키텍쳐 타입, Section Header Table의 파일 오프셋, 크기, 엔트리의 개수를 담고있다.
- Section Header Table
- 파일 마지막에 위치함. ELF Header와 함께 샌드위치처럼 섹션들을 가두고 있음.
- 여러 섹션들의 위치와 그 크기를 저장하고 있음.
- 섹션
.text
: 컴파일된 프로그램의 바이너리 코드가 들어있음
.rodata
: 읽기전용 데이터로, 등에 하드코딩 된 리터럴들이 들어있음. switch
문의 점프테이블도 여기에 들어있대!
.data
: 초기화된 전역변수와 정적변수들이 담겨있는 곳.
.bss
: 초기화되지 않은 전역변수와 정적변수들이 담겨있는 곳. ELF 파일에는 실제로 존재하지는 않는 영역이지만 메모리에 올라갈 때 메모리 공간을 할당받는다.
.symtab
: symbol table, 함수와 전역변수들이 정의된 곳.
- [?]
.rel.text
: 다른 목적파일과 링크할 때 수정이 이루어질 .text
영역의 위치들의 리스트를 저장. ???????????
.rel.data
: 다른 모듈에 정의되어 있는 전역변수들은 링크 전에는 단순히 그것이 있다 정도로만 선언되어있다. extern
으로 선언된 함수나 변수들이 이에 들어감.
.debug
: 디버그 정보들이 들어있는 섹션
.line
: 디버그와 마찬가지로 라인 넘버가 들어있는 섹션
.strtab
: 문자열 테이블, symtab
이 참조함.