ํฌ์ŠคํŠธ

๐ŸŒ’ ์ปดํŒŒ์ผ, ์ปดํŒŒ์ผ๋Ÿฌ, ์–ด์…ˆ๋ธ”๋Ÿฌ, ๋ง์ปค, ๋กœ๋”

๋„ค์ด๋ฒ„ ๋ธ”๋กœ๊ทธ ์‚ฌ์šฉ ๋‹น์‹œ ์ผ๋˜ ๊ธ€์„ ์˜ฎ๊ฒจ์˜จ ๊ธ€ ์ž…๋‹ˆ๋‹ค. ์ผ๋ถ€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฐธ๊ณ 


  • Compile ์ปดํŒŒ์ผ
    • ํŠน์ •[์›์‹œ] ์–ธ์–ด (Source) ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ[๋ชฉ์ ] ์–ธ์–ด (Target) ์˜ ์ฝ”๋“œ๋กœ ๋ณ€์—ญ[ํ•ด์„, ๋ณ€ํ™˜]ํ•˜๋‹ค, ํ˜น์€ ๊ทธ ๊ณผ์ •
    • ์ฃผ๋กœ โ€˜๊ณ ๊ธ‰ ์–ธ์–ด (High Level) ๋กœ ์ž‘์„ฑ๋œ ์ฝ”๋“œ๋ฅผ ์ €๊ธ‰ ์–ธ์–ด (Low Level) ๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ, ํ˜น์€ ๊ทธ ๊ณผ์ •โ€™ ์„ ์˜๋ฏธํ•จ
  • Compiler ์ปดํŒŒ์ผ๋Ÿฌ
    • ์ปดํŒŒ์ผ[๋ฒˆ์—ญ, ํ•ด์„, ๋ณ€ํ™˜]ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ
  • ๋ณธ๋ž˜ ์ปดํŒŒ์ผ์€ โ€˜ํŠน์ • ์–ธ์–ดโ€™๋ฅผ โ€˜๋‹ค๋ฅธ ์–ธ์–ดโ€™๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ, ํ˜น์€ ๊ทธ ๊ณผ์ •

  • HLL โ†’ HLL
    • I.E. Java โ†’ C#์œผ๋กœ => Source to Source Compiler, Transcompiler)
  • LLL โ†’ HLL
    • I.E. Byte Code โ†’ Java, Python / ๊ธฐ๊ณ„์–ด, ์–ด์…ˆ๋ธ”๋ฆฌ์–ด โ†’ C#(์ถ”์ƒ)์œผ๋กœ => Decompiler)
  • LLL โ†’ LLL
    • I.E. ์–ด์…ˆ๋ธ”๋ฆฌ์–ด โ†’ ๊ธฐ๊ณ„์–ด = Assembly, ๊ธฐ๊ณ„์–ดโ†’ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด = Disassembly)
  • Compile ์‚ฌ์ „์  ์˜๋ฏธ
    • (์—ฌ๋Ÿฌ ์ถœ์ฒ˜์—์„œ ์ž๋ฃŒ๋ฅผ ๋”ฐ์™€) ์—ฎ๋‹ค, ํŽธ์ง‘[ํŽธ์ฐฌ]ํ•˜๋‹ค
    • ์™œ ์ด๋Ÿฐ ๋œป์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Compile ์ด โ€˜~ ๋ฒˆ์—ญํ•˜๋‹ค(์ปดํ“จํ„ฐ)โ€™ ๋ผ๋Š” ์˜๋ฏธ๋„?
  • โ†’ ์ตœ์ดˆ์˜ ์ปดํŒŒ์ผ๋Ÿฌ โ€˜A-0โ€™
    • By Grace Hopper
    • ํ˜„๋Œ€์˜ ์ปดํŒŒ์ผ๋Ÿฌ๋กœ์„œ ๋™์ž‘ํ•˜๊ธฐ ๋ณด๋‹ค, ๋ง์ปค (Linker) ๋˜๋Š” ๋กœ๋” (Loader) ๋กœ์„œ ๋” ๋งŽ์ด ๋™์ž‘๋๊ธฐ ๋•Œ๋ฌธ
  • Linker
    • ์—ฌ๋Ÿฌ ํŒŒ์ผ(Source Code, Library, โ€ฆ)์„ ํ•˜๋‚˜์˜ ์‹คํ–‰ ํŒŒ์ผ๋กœ ์—ฐ๊ฒฐ์‹œ์ผœ ์ฃผ๋Š” ์—ญํ• 
    • ๋•Œ๋ฌธ์— โ€˜A-0โ€™ ๋ฅผ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด โ€˜์—ฎ๋‹ค, ํŽธ์ง‘ํ•˜๋‹คโ€™ ๋ผ๋Š” ๋œป์˜ Compile + ~er = Compiler ๋ผ๋Š” ์šฉ์–ด ๋งŒ๋“ฆ
  • ์ปดํŒŒ์ผ(์ปดํ“จํ„ฐ)์˜ ๊ฐœ๋…์ด ์ ์ฐจ ๋ฐ”๋€Œ๋ฉด์„œ, ๋‹จ์–ด์˜ ๋œป ์—ญ์‹œ โ€˜~ ๋ฒˆ์—ญํ•˜๋‹ค(์ปดํ“จํ„ฐ)โ€™ ๋กœ ๋ฐ”๋€œ
  • ์ฐธ๊ณ  : โ€˜ํ•จ๊ป˜โ€™ ๋ผ๋Š” ์˜๋ฏธ์˜ โ€˜Comโ€™ + โ€˜์Œ“์•„์˜ฌ๋ฆฌ๋‹คโ€™ ๋ผ๋Š” ์˜๋ฏธ์˜ โ€˜Pileโ€™

  • ์ปดํŒŒ์ผ์˜ ๊ณผ์ • (I.E. HLL โ†’ Machine L)

HLL : Source Code
โ†“ Compiler
Machine L : Object Code
โ†“ Linker
์‹คํ–‰ ํŒŒ์ผ

์–ธ์–ด์— ๋”ฐ๋ผ
Source Code โ†’ Object Code ๋ฒˆ์—ญ ๊ณผ์ •๊นŒ์ง€๋งŒ์„ ์˜๋ฏธํ•˜๊ฑฐ๋‚˜,
Linker๋ฅผ ํ†ตํ•œ ์‹คํ–‰ ํŒŒ์ผ ์ƒ์„ฑ ๊ณผ์ •๊นŒ์ง€๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Œ

C๋Š” ์ „์ž

  • Object File ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ : ๊ธฐ๊ณ„์–ด๋กœ ์ด๋ฃจ์–ด์ง„ ํŒŒ์ผ

  • Linking : ํ•œ ๊ฐœ ์ด์ƒ์œผ๋กœ ์กด์žฌํ•˜๋Š” ์˜ค๋ธŒ์ ํŠธ ์ฝ”๋“œ๋ฅผ ํ•ฉ์ณ ํ•˜๋‚˜์˜ .exe ์‹คํ–‰ ํŒŒ์ผ๋กœ ๋งŒ๋“œ๋Š” ๊ฒƒ, ํ˜น์€ ๊ทธ ๊ณผ์ •
  • Linker
1
2
3
4
5
6
#include <stdio.h>
int main()
{
	printf("Hello, World!");
	return 0;
}

์ฝ”๋”ฉ ์‹œ ํ”„๋กœ๊ทธ๋žจ์— ํ•„์š”ํ•œ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๊ณ , ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉ

I.E.
printf๋Š” #include ๋ฅผ ํ†ตํ•ด, stdio.h Library์— ์ด๋ฏธ ๋งŒ๋“ค์–ด์ง„ ํ•จ์ˆ˜๋ฅผ ๊ฐ€์ ธ๋‹ค ์‚ฌ์šฉํ•œ ๊ฒƒ

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// Program1.c
#include <stdio.h>

extern int age;

int main()
{
	printf("My age is %d", age);
	return 0;
}

// Program2.c
#include <stdio.h>
int age = 20;

๋˜ํ•œ, ๋ณดํ†ต ๋‹ค์ˆ˜์˜ ์ฝ”๋“œ ํŒŒ์ผ์„ ๋‹ค๋ฃจ๊ฒŒ ๋˜๊ณ , ๊ทธ ์ฝ”๋“œ๋“ค์€ ์„œ๋กœ์—๊ฒŒ ์˜ํ–ฅ์„ ์คŒ

โ†’ ์ž‘์„ฑํ•œ Source Code์™€, Library ๋“ฑ์„ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ ํ•˜๋‚˜์˜ .exe ์‹คํ–‰ํŒŒ์ผ๋กœ ๋งŒ๋“œ๋Š” ์ž‘์—… โ†’ I.E. C Code์™€, stdio.h Library๋ฅผ ํ•˜๋‚˜๋กœ ํ•ฉ์ณ ํ•˜๋‚˜์˜ .exe ์‹คํ–‰ํŒŒ์ผ๋กœ ๋งŒ๋“œ๋Š” ์ž‘์—…

โ†’ Linking, Linker

  • ์ปดํŒŒ์ผ๋Ÿฌ์˜ ์ข…๋ฅ˜
    • ํŠน์ • ํ”Œ๋žซํผ โ†’ ๋‹ค๋ฅธ ํ”Œ๋žซํผ
      • I.E. Window10 โ†’ Android, Crosscompiler
    • ์ปดํŒŒ์ผ๋Ÿฌ์—์„œ ์ปดํŒŒ์ผ๋Ÿฌ๋ฅผ
      • I.E. CompilerCompiler
์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.