네이티브 컴파일 언어 (C, C++)에 해당되는 내용
과정
- Source Code가 작성된다.
- 해당 코드는 컴파일러를 통해 어셈블리 언어로 변형된다.
- 해당 어셈블리 언어는 어셈블러를 통해 Machine Language로 변환된다.
- 각 모듈에 따라 Machin Language로 변환된 내용이 포함된 Object File이 생성된다.
- Linker를 통해 Object File들과 외부 Library를 합쳐 실행 가능한 파일 (Executable File)이 생성된다.
- Loader를 통해 Disk에서 Executable File을 불러와 실행
Object File 정보
- Header: Object File의 메타 정보(크기, 위치...)
- Text Segement: Machine Language Code 포함
- Static Data Segement: 프로그램 실행 동안 할당된 데이터들
- Relocation info: 재할당이 필요한 데이터들의 정보 (외부 의존 변수)
- Symbol Table: 전역 definiations 와 외부 참조 정보
- Debug Info: 디버깅 정보
Linker
따로 연결된 Module을 하나로 연결
- Object File들을 하나로 연결
- label들의 주소들 결정
- 외부 참조 해결 후 내부 참조 해결
Loader
- 헤더를 읽어서 Segement의 크기를 읽는다.
- 주소들이 저장될 공간을 만든다.
- Text를 읽고 데이터를 메모리에 할당한다.
- 파라미터를 스택에 할당한다.
- 레지스터를 초기화한다.
- 시작 루틴을 브랜치한다.
Dynamic Linking
- 실행이 되면 필요한 라이브러리를 Linking한다.
- 필요한 라이브러리의 버전을 바꾸면 동적으로 버전을 변경하여 실행할 수 있다.