System Programming

[System Programming] 3. C Toolchain

잉숭 2021. 3. 10. 19:28

1. C PreProcessor(C 전처리기) : hello.c -> hello.i

 

#으로 시작하는 명령어들을 소스코드 내에서 수행한다

#include : 다른 파일을 insert (<>는 경로를 알때, ""는 경로를 모를때, 따라서 경로를 명시해야 한다)

#define : 심볼이나 매크로를 정의

#if/#endif : 조건의 참/거짓 여부에 따라 뒤의 문장들을 컴파일

#ifdef/#endif : 해당 심볼의 정의 여부에 따라 뒤의 문장들을 컴파일

전처리 명령어들은 세미콜론이 아닌 개행여부로 판단한다

 

2. C Compiler : hello.i -> hello.s

 

전처리된 소스코드들이 프로그래머가 지정한 아키텍쳐(ARM, Intel 등)에 따라 어셈블리 코드로 변환된다

 

3. C Assembler : hello.s -> hello.o

 

어셈블리 코드를 기계어 코드로 변환한다

 

4. Linker : hello.o -> hello.exe

 

symbol 테이블을 만든다 : (symbol 이름, symbol 위치) 쌍을 저장

만약 symbol 위치를 모르면 빈칸으로 남기는데 이는 프로그램 실행 중 동적으로 찾는다