object file
시스템소프트웨어 - 실행 파일이 만들어지는 과정
Object 파일
object file은 object code로 이루어진 파일이다. object 코드는 일반적으로 cpu에서 바로 실행될 수 없다. object file에는 여러 가지 형태(format)이 존재한다.
Executable and Linkable Format(ELF)
ELF는 object file을 위한 표준 binary format이다. AT&T의 System V Unix로부터 파생(derived)되었다. 이후에는 BSD Unix variants와 Linux에 적용되었다. System V(Five)는 가장 영향력 있고 널리 퍼진 Unix 버전이다. Unix는 1970년대 AT&T에서 개발된 운영체제이다. 현대의 많은 운영 체제(Linux, BSD, macOS 등)와 기술에 영향을 주었다.
ELF 다음 세 가지 object file 종류에 대한 통일된 형식이다.
- relocatable object file (.o, Windows에서는 .obj)
- executable object files
- shared object files (.so, Windows에서는 .dll)
ELF section
ELF는 다음과 같은 section으로 나누어지며 각 section에는 필요한 정보들이 있다.
-
ELF header - magic number, type(.o, exec, .so), machine(AMD64, ARM, MIPS 등의 ISA), byte ordering(little/big endian) 등
-
Program header table - Page size, virtual addresses memory segments(sections), segment sizes와 같은 실행(메모리에 로드)되기 위해 필요한 정보들
-
.text section - (object)code
-
.data section - 초기화된(static) 변수들과 그 값을 저장하는 영역
-
.bss section (Better Save Space) - 초기화되지 않은 전역 또는 static 변수를 저장하는 section이다. 변수들에 저장될 실제 값을 가지고 있지 않기 때문에 메모리에서 필요로 하는 만큼의 disk 저장공간을 사용하지 않게 되어 disk 공간을 절약 할 수 있다. 실행 파일이 메모리에 로드될 때, 운영체제는 .bss 섹션의 크기 정보를 참조하여 해당 크기만큼의 메모리를 할당하고 모두 0으로 초기화 한다.
-
.symtab section - symbol table 영역이다. 함수(procedure)와 static 변수의 이름(symbol)과 그 위치(location, 메모리 주소값)를 관리한다. 지역변수와는 관련 없다.
-
.rel.text section - .text section에 대한 relocation 정보. 일반적으로 해당 파일 외부(external)의 함수를 호출하거나 전역 변수에 접근하는 instruction을 관리한다.
-
.rel.data section - 다른 파일에서 참조되거나 현재 파일에서 정의된 전역변수에 대한 relocation 정보를 저장하는 영역. 일반적으로 전역 변수의 주소값으로 초기화된 변수를 관리한다.
-
.debug section - symbolic debugging을 위한 정보가 저장된다. (
gcc -g
)
Linking
한 개 이상의 object 파일에서 동일한 section들을 하나로 합쳐 새로운 (실행)파일을 만든다.
reference
- 3학년 2학기 시스템소프트웨어 강의자료
- Computer Organization and Design 5th Edition
Comments