Building and Loading Programs

컴파일러

어떤 프로그래밍 언어로 작성된 컴퓨터 코드를 다른 언어로 번역해주는 프로그램
ex)Python to C compiler
C 컴파일러는 C 코드를 기계어로 번역한다
유명한 C 컴파일러들
GNU C Complier
Clang

단일 소스파일

$ gcc file.c
$ ./a.out  //a.out은 기본 프로그램 이름

$ gcc -o prog file.c   프로그램 이름을 명료화하기 위한 -o 옵션
$ ./prog

다중 소스파일

$ gcc -c file1.c
$ gcc -c file2.c     -c:링킹 x,C 파일들을 오브젝트 파일로 컴파일한다
$ gcc -c file3.c
$gcc -o prog  file1.o file2.o file3.o 사용자 오브젝트 파일과 시스템 파일들을 함께 연결해 실행 가능한 파일을 만든다 
$ ./prog

프로세스 빌드의 3단계 과정

Preprocessing(전처리 과정)

주석 삭제
헤더 파일을 소스파일 내에 include(포함)해준다
메크로 포함
조건부 compilation
Line control

Compiling

전처리된 소스 파일들을 오브젝트 파일로 변환한다

오브젝트 파일

CPU-의존하는 기계어로 쓰여진다
다른 CPU구조에서 사용 불가능(ex:intel사의 오브젝트 파일은 ARM사의 오브젝트 파일에서 사용 불가능)
인스트럭션(명령), 데이터 모두를 포함한다

컴파일러 최적화 옵션

특정 코드 일반화 정책을 지시하기 위해 -o 옵션이 사용된다

Linking

오브젝트 파일(CRT 와 libc 포함)들을 실행 가능한 파일로 결합한다
-각각의 오브젝트 파일들은 다른 오브젝트 파일들에 호출과 접근을 가진다
-그들 사이 연결이 만들어저야 한다
CRT는 메인함수라 불리는 초기화 코드를 가진다
Standard C library(libc)는 printf,scanf 등에 대한 일련의 오브젝트 파일들이다

실행 파일

명령어와 데이타가 많은 오브젝트 파일들로부터 연결되었다
실행되었을 때,CRT의 전체 함수들이 OS에 전달된다
각각 OS마다 파일 형식들이 다르다

GNU Binutils

바이너리 파일들을 다루는 유틸리티들(오브젝트 파일들과 실행 가능한 파일)

$ objdump -s file.o   전체 목록을 보여준다
$ objdump -D file.o   분산된 어셈블리 언어를 보여준다

프로그램 로딩

파일의 텍스트와 데이터 요소들을 메모리로 복사한다
초기화되지 않은 전역변수들에 BSS를 할당하고 제로화한다
동적 메모리를 위한 힙을 준비한다
지역 변수와 함수 호출을 위한 스택을 준비한다

메모리 내 프로그램

변수와 함수들은 주소 공간에 그들 자신의 영역을 가지고 있다

좋은 웹페이지 즐겨찾기