Computer Structure/컴퓨터 시스템

컴파일 시스템(Compile System)

appmaster 2019. 9. 26. 13:07

  컴파일 시스템의 전체 모습

 

 

 

전처리(preprocess)단계

- 전처리기(cpp)는 소스 C 프로그램의 #지시어(directive)에 따라 처리

-  hello.c의 #include<stdio.h> 지시어는 전처리기에게 시스템 헤더파일 stdio.h의 삽입을 지시

-  삽입된 처리 결과는 hello.i로 생성

  전처리단계

 

 

 

 

컴파일(compile) 단계

-  컴파일러(cc1)는 hello.i를 어셈블리어 프로그램으로 변환하여 hello.s 를 생성

    - 아래에서 각 줄이 한 개의 저수준 어셈블리 명령어를 텍스트 형태로 표시

  컴파일단계

 

 

어셈블리 명령어

 

 

어셈블리(assembly) 단계

-  어셈블러(as)가 어셈블리 명령어를 기계어 명령어(코드)로 변환

-  메모리에 재배치 가능한 프로그램(relocatable program) 형태의 hello.o 의 목적 파일 생성

   - main 함수의 기게어 명령어를 인코딩한 바이너리 파일(binary file)

   - 텍스트 편집기로는 읽을 수 없고 리눅스의 objdump 명령으로 역 어셈블(disassemble. -d)하여 표시

기계어 명령어(코드)

 

 

 

링크(Link) 단계

-  링커 프로그램이 라이브러리 등을 결합하여 메모리에 적재되어 실행되는 실행 가능한 목적파일(실행 파일)을 생성

-  표준 C 라이브러리의 printf 함수의 목적파일 printf.o와 hello.o를 통합한 실행 파일 hello를 생성

-  이 실행 파일은 메모리에 적재(load)되어 시스템에 의해 실행

  링크단계