<aside>

전형적인 ELF 재배치 가능 목적파일 (출처 : CSAPP Fig. 7.3)
</aside>
<aside>
💡
ELF = Executable and Linkable Format
</aside>
ELF Header
- 시작
- 파일을 생성한 워드 크기
- 시스템 바이트 순서를 나타내는 16바이트 배열
- 나머지
- 링커가 목적파일을 구문분석하고 해석하도록 정보를 포함
- ELF 헤더크기
- 목적 파일 타입
- 머신 타입
- 섹션 헤더 테이블의 파일 오프셋
- 섹션 헤더 테이블
- 각 섹션에 대해 고정된 크기의 엔트리를 가짐
ELF Header, 섹션 헤더 테이블을 제외한 Sections
.text
.rodata printf
.data
- 초기화된 C 전역변수, 정적 변수
- 지역변수는 런타임 스택에 저장됨
.bss
- 초기화되지 않은 C 전역변수, 정적변수
- 0으로 초기화된 전역변수, 정적 변수
- 해당 섹션의 경우 목적파일에 실제 공간을 차지하지는 않음 - 위치 표시용
.symtab
- 프로그램에서 정의되고 참조되는 전역변수 & 함수에 대한 정보를 갖는 심볼 테이블
.rel.text
- 링커가 목적파일 연결을 수행할 때 수정되어야 하는
.text
섹션 내 위치들의 리스트
- 외부 함수를 호출 or 전역 변수 참조하는 명령은 모두 수정되어야함
.rel.data
- 해당 모듈에 의해 정의되거나 참조되는 전역변수들에 대한 재배치 정보
.debug
- 프로그램 내에서 정의된 지역변수와 typedef
- 프로그램과 최초 C 소스 파일에서 정의되고 참조되는 전역변수들을 위한 엔트리를 갖는 디버깅 심볼 테이블
- -g 옵션으로 생성
.line
- 최초 C 소스 프로그램과
.text
섹션 내 머신 코드 인스트럭션 내 라인 번호들 간의 매핑
.strtab
.strtab
/ .debug
섹션들 내에 있는 심볼 테이블과 섹션 헤더들에 있는 섹션 이름들을 위한 스트링 테이블