Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 외부접속
- CSS
- 자격증
- WPF
- 매크로
- Developer
- CodeIgniter
- php
- cording
- 프로그래밍언어론
- 개발
- plan
- 방화벽
- 홈서버
- 개발공부
- windows
- C
- html
- 개인서버
- 220821
- knockon
- study
- bootcamp
- React
- Mac
- 오답풀이
- 정보처리기능사
- Java
- git
- 프로그래밍 언어론
Archives
- Today
- Total
bunta의 보조기억장치
[3주차 TIL] KnockOn Bootcamp 컴파일러 본문
반응형
💡 컴파일러란?
컴파일이란 프로그래머가 고급언어(C, C++, Java 등)로 작성한 코드 전체를 컴퓨터가 이해할 수 있도록 기계어로 번역하는 과정을 말한다. 그리고 이 컴파일을 자동으로 수행해주는 프로그램을 컴파일러라고 부른다.
컴파일러는 여러 종류가 있지만 이 글에서는 그 중에서도 gcc에 대해서 다뤄보고자 한다.
🔎 컴파일 과정
1. 전처리(Preprocessing)
- #include, #define 같은 전처리 지시문 처리
- 매크로 치환, 헤더 파일 포함 등
2. 컴파일(Compilation)
- 전처리된 코드를 어셈블리어로 변환
- 문법 검사, 변수·함수 분석, 오류 체크 등
3. 어셈블리(Assembly)
- 어셈블리 코드를 기계어로 번역
4. 링킹(Linking)
- 여러 개의 목적 파일과 라이브러리를 연결해 실행 가능한 프로그램 생성
🎯 컴파일 과정 예시
hello.c 파일의 컴파일 과정을 따라가면서 컴파일이 어떤 식으로 진행이 되는지 확인해보자
hello.c
#include <stdio.h>
#define HELLO "Hello, world!"
int main()
{
printf("%s\n", HELLO);
return 0;
}
↓
전처리 진행
↓
hello.i (hello.c 가 전처리된 파일)
extern int printf(const char *, ...); // #include <stdio.h>가 실제 내용으로 치환, 실제 코드는 매우 길기 때문에 생략
int main() {
printf("%s\n", "Hello, world!"); // HELLO 부분이 "Hello, world!")로 치환
return 0;
}
↓
컴파일 진행
↓
hello.s (hello.i 가 어셈블리어로 변환된 파일)
.file "hello.c"
.text
.globl main
.type main, @function
main:
pushq %rbp
movq %rsp, %rbp
leaq .LC0(%rip), %rdi
call printf
movl $0, %eax
popq %rbp
ret
.LC0:
.string "Hello, world!"
↓
어셈블리 진행
↓
hello.o (hello.s 를 목적 파일로 변환된 파일)
0000000000000000 <main>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: 48 8d 3d 00 00 00 00 lea 0x0(%rip),%rdi
b: e8 00 00 00 00 callq 10 <main+0x10>
10: b8 00 00 00 00 mov $0x0,%eax
15: 5d pop %rbp
16: c3 retq
↓
링킹 진행
↓
hello (hello.o 를 라이브러리와 연결하여 실행 가능한 파일 생성)
$ ./hello
Hello, world!
반응형
'KnockOn Bootcamp' 카테고리의 다른 글
[3주차 TIL] KnockOn Bootcamp 로더 (0) | 2025.04.19 |
---|---|
[3주차 TIL] KnockOn Bootcamp 링커 (0) | 2025.04.19 |
[3주차 TIL] KnockOn Bootcamp 아키텍처 (0) | 2025.04.16 |
[2주차 TIL] KnockOn Bootcamp 탐색 알고리즘 (0) | 2025.04.15 |
[2주차 TIL] KnockOn Bootcamp 정렬 알고리즘 (0) | 2025.04.15 |
Comments