○Linking
▷obj 파일, 라이브러리 파일을 한데 묶어 실행파일로 만드는 과정
▶사용하는 이유
▶Modularity
▷여러 개의 소스파일을 모듈화하여 관리 가능하다. (각 팀이 다른 코드를 관리 가능)
▷자주 사용하는 함수들을 라이브러리로 만들어 사용 가능
▶Efficency
▷하나의 소스파일이 바뀌어도 모든 소스를 재컴파일 할 필요가 없기 때문에, 시간 절약 가능
▷라이브러리로 자주 사용하는 함수를 여러번 재정의할 필요가 없기 때문에, 공간 절약 가능
▶역할
▶Syombol Resoultion
▷프로그램은 함수명/변수명 등의 symbol을 정의하고, 이를 reference시킨다.
▷이런 symbol table은 obj파일의 symbol table에 배열의 형태로 있다. (이름, 크기, 위치)
▷linker는 각 symbol과 reference를 연결시켜준다.
▶Reolcation
▷각각의 code, data section을 하나로 합친다.
▷obj파일에 상대적으로 정해진 symbol들을 재배치시킨다.
▷모든 reference를 새로 정해진 위치로 Update시킨다.
▶Object Files 종류
▶Relocatable Object File (.o)
▷하나의 소스 파일 (.c)의 데이터, 코드의 정보를 담고 있는 파일
▷ 다른 .o 파일들과 결합하여 실행파일을 만들 수 있다.
▶Executable Object File (.out)
▷코드, 데이터들이 메모리에 복사되어 바로 실행가능하다.
▶Shared Object File (.so)
▷load-time / run-time 도중에 동적으로 linking가능한 Relocatable Object File.
▷Dynamic Link Libraries (DLLs)라고도 부른다.
▶Ecutable and Linkable Format (ELF)
▷Linux에서 Object file에 대한 Standard binary format

▷ELF header : Word size, Byte ordering, File type, machine type, ...
▷Segment header table : Page size, virtual addresses memory segments, ...
▷.text section : Code
▷.rodata section : Read only data: jump tables, ...
▷.data section : Initialized lobal variables
▶.bss section
▷Uninitialized global variables
▷Symbol만을 가짐, 공간을 차지하지 않음?
▶.symtab section
▷Symbol table
▷Procedure and static variable names
▷Section names and locations
▶.rel.text section
▷Relocation info of .text section
▷명령의 주소가 exe파일에서 수정될 필요가 있음. (상대주소 - rip에서 연산)
▶.rel.data section
▷Relocation info of .data section
▷포인터의 주소가 exe파일에서 수정될 필요가 있음.
▷.debug section : symbolic debugging info (gcc -g)
▷.Section header table : Offsets and sizes of each section
▶Linker symbol
▶Global Symbols
▷해당 모듈에서 정의되어 다른 모듈에서 referenced 되는 symbol
▷non-static C functions, non-static global variables
▶External Symbols
▷다른 모듈에서 정의되어 해당 모듈에서 referenced 되는 symbol
▶Local Symbols
▷오직 해당 모듈에서 정의되고, referenced 되는 symbol (.bss, .data에 저장)
▷static-global variables
▷지역 변수와는 다르다. (지역 변수 - stack에 저장)
▶중첩 symbol
▷Strong : 초기화된 global variable
▷Weak : 초기화되지 않은 global variable / extern이 붙은 global variable
▶규칙
▷여러 개의 Strong : 컴파일 에러
▷하나의 Strong, 여러개의 Weak : Strong 선택
▷여러 개의 Weak : Weak중 무작위로 선택 -> 가장 위험!
▶해결책
▷Global variable의 사용을 피한다.
▷사용한다면 static/extern 한정자를 붙이거나 초기화 시킨다.
▶exe파일 -> Memory

'컴퓨터 지식 > 시스템' 카테고리의 다른 글
Exception Control (0) | 2020.12.03 |
---|---|
Library (0) | 2020.12.01 |
Memory Performance (0) | 2020.11.24 |
Cache Memory (0) | 2020.11.19 |
Memory Hierarchy (0) | 2020.11.17 |