시스템소프트웨어 - 실행 파일이 만들어지는 과정

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에는 필요한 정보들이 있다.

object file format

  • 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들을 하나로 합쳐 새로운 (실행)파일을 만든다.

ELF linking

reference

Tags:

Categories:

Updated:

Comments