7.4-Relocatable_Object_Files

ELF Header는
16바이트 배열로 word 사이즈와 이 파일을 생성한 시스템의 바이트 순서가 저장되어있다.
header 의 나머지 부분은 linker 가 목적파일을 파싱하고 해석하는데 필요한 정보가 담겨있다.
이것은 ELF Header 의 사이즈, Obj 파일의 형식(relocatable, executable, shared),
machine-type(x86-64...), section header table에 대한 file offset(base 주소로부터의 거리),
section header table 로 향하는 entries 의 개수와 사이즈 가 있다.
section header table에는
다양한 section에 대한 위치와 사리즈가 저장되어 있다.
또한, 각 section 에 대한 고정된 크기의 entry 도 존재한다.
ELF Header 와 Section header Table 사이에는 실제 section 이 존재한다.
보통은 아래와 같은 section 을 갖는다.
컴파일된 프로그램이 machine code 형태로 저장되어있다.
Read-Only 데이터, Printf의 형식지정자, switch 문의 jump tables 등이 존재한다.
된 전역, static 변수가 저장되어있다.
지역변수는 stack 에 run-time 시에 존재하므로, data 나 아래의 bss에 존재하지 않는다.
된 전역, static 변수, 0으로 초기화된 전역 static 변수가 저장되어있다.
이 구역은 실제로는 공간을 차지하지 않는다.
단순한 임시공간(PlaceHolder) 로 Obj 파일 형식은 공간효율을 위해 초기화, 비초기화 변수들을 구분한다.(초기화되지 않은 변수는 공간을 차지할 필요가 없다.)
run-time 시에 이 변수들은 메모리에 0으로 초기화되면서 할당된다.
이 저장되어있다.
해당 테이블에는 프로그램에서 정의되고 사용되는(참조되는) 함수와 전역변수에 대한 정보가 담겨있다.
모든 relocatable 목적파일은 symbol table 이 .symtab 에 존재한다.
하지만, 컴파일러에 있는 symbol table 과 달리, 지역변수에 대한 접근은 존재하지 않는다.
.text 영역 중 linker 가 다른 목적파일과 연결할 때, 변경되어야하는 위치들의 모음이다.
보통 전역변수나 외부 함수에 대한 call 을 나타내는 명령어가 해당된다.
이 정보는 실제 실행목적파일에 필요하지 않기 때문에, 따로 linker에 포함해달라는 요청이 있지 않는 한, 제거된다.
전역변수에 대한 재할당 정보, 그중에서 모듈에 의해 참조되거나 정의된 정보에 해당한다.
보통 전역변수나 외부 함수에 대한 주소를 초기값으로 갖는 초기화된 전역변수에 해당한다.
컴파일러에 -g 옵션(debugging information 생성 요청) 이 있을 경우, 만들어진다.
지역변수, 프로그램 내 타입 정의, 프로그램 내에 정의되고 참조된 전역변수, C언어 소스코드 에 대한 entries 가 저장된 debugging symbol table 이 존재한다.
컴파일러에 -g 옵션(debugging information 생성 요청) 이 있을 경우, 만들어진다.
line number 와 C언어 소스코드 간의 맵핑을 저장한다.
string table로, .symtab, .debug 영역의 symbol table, section header 에 존재하는 section 이름을 위해 존재한다.
이 테이블은 null-terminated 문자열의 배열이다.