1. Executable Header와 Program Header의 차이?
ELF Header : “ ELF 파일의 메타 데이터를 가진 헤더 ”
Program Header : “ 메모리에 적재하는 하나 또는 그 이상의 섹션의 집합”
2. 좀 더 자세히 알기!
1) ELF
- Executable and Linking Format의 약어
- 실행가능한 바이너리 파일, 목적파일, 공유 라이브러리, 코어 덤프 등에서 사용되는 형식
- UNIX / LINUX 기반에서 사용되는 실행 및 링킹 파일 포맷
1-1) ELF 헤더
- ELF 파일의 메타데이터를 가진 헤더
- ELF헤더는 binary에 대한 일반적인 정보를 포함하고 있음
- 비트 포맷은 어떻게 되는지, 리틀 엔디안인지 빅 엔디안인지 ELF의 버전, 파일의 타입 등
2) Segment (= Program Header)
- 동일한 메모리 속성(read-only, writable…)을 가진 하나 또는 그 이상의 섹션의 집합
- ELF Binary를 적절한 크기로 잘라 executable이 memory에 올릴 수 있게 만들어 놓음
2-2) Program Header Table
- ELF 내의 Segment에 대한 정보, Segment들을 어떻게 로드해야하는지에 대한 정보
3) Section
- 특정 정보를 포함하고 있는 ELF file의 작은 조각
.init : init()을 위한 instruction이 위치한 섹션
.text : ELF 파일의 실행가능한 코드들이 위치하고 있는 섹션
.data : 초기화된 C 전역변수 및 정적변수들이 위치하는 섹션
.bss : 초기화되지 않은 전역변수가 위치하는 섹션
3-2) Section Table
- section name, type, flags, va 등 다양한 정보 (section에 대한 메타데이터)
3. 참고 자료
'Review > SW Jungle' 카테고리의 다른 글
[WEEK12] Pintos _ Project3 Virtual Memory 정리 및 회고 (1) | 2022.12.13 |
---|---|
[WEEK11] Pintos _ Project3 FIFO / LRU / Clock 알고리즘? Eviction 정책들 파헤치기 (0) | 2022.12.13 |
[WEEK10] Pintos _ Project2 User Program (2.2) System Calls (0) | 2022.11.29 |
[WEEK10] Pintos _ Project2 User Program (2) System Calls (0) | 2022.11.29 |
[WEEK09] Pintos _ Project2 User Program (1) Argument Passing (0) | 2022.11.29 |