Jastes 2022. 4. 13. 09:47

Program

์—ฐ์‚ฐ์žฅ์น˜๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์ž‘์„ ์ •์˜ํ•œ ์ผ์ข…์˜ ๋ฌธ์„œ!

์—ฐ์‚ฐ ์žฅ์น˜์— ์ „๋‹ฌํ•˜๋ฉด, CPU๋Š” ์ ํ˜€์žˆ๋Š” ๋ช…๋ น๋“ค์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์˜๋„ํ•œ ๋™์ž‘ ์ˆ˜ํ–‰

์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ํ•ด์„ํ•˜์—ฌ ๋ช…๋ น์–ด๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ์‚ฐ ์žฅ์น˜(programmable)
ํ˜„๋Œ€ PC๋Š” ๋Œ€ํ‘œ์  programmable ์—ฐ์‚ฐ์žฅ์น˜, ์ผ๋ฐ˜๊ณ„์‚ฐ๊ธฐ๋Š” ๋Œ€ํ‘œ์ ์ธ non-programmable
 

์šด์˜์ฒด์ œ ๋ฐœ์ „๊ณผ์ •

์šด์˜์ฒด์ œ์˜ ๊ธฐ์ˆ  ๋ฐœ์ „ ๊ณผ์ • ์ผ๊ด„์ฒ˜๋ฆฌ/ ๋‹ค์ค‘ ํ”„๋กœ๊ทธ๋ž˜๋ฐ/ ์‹œ๋ถ„ํ™œ/ ๋‹ค์ค‘ ์ฒ˜๋ฆฌ/ ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ ์šด์˜์ฒด์ œ์˜ ๋ฐœ์ „ ๊ณผ์ • 1์„ธ๋Œ€ ์ผ๊ด„์ฒ˜๋ฆฌ 2์„ธ๋Œ€ ์‹œ๋ถ„ํ™œ ๋‹ค์ค‘ ํ”„๋กœ๊ทธ๋ž˜๋ฐ/ ์ฒ˜๋ฆฌ ์‹ค์‹œ๊ฐ„ 3์„ธ๋Œ€ ๋‹ค์ค‘ ๋ชจ๋“œ 4์„ธ๋Œ€

dystopia050119.tistory.com

์ž์„ธํ•œ ์—ญ์‚ฌ๋Š” ์œ„ ๋งํฌ๋ฅผ ๋ณด์‹œ๋ฉด ๋˜์š”, ๋‹ค ์„ค๋ช…ํ•˜๊ธฐ ํž˜๋“œ๋‹ˆ๊นŒ ใ… 

๋˜ํ•œ ๋งŽ์€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์€ ํ”„๋กœ๊ทธ๋žจ์„ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋Š”๋ฐ ์ด๋Š” 

"Stored-Program Computer์—์„œ ํ”„๋กœ๊ทธ๋žจ์ด ์ €์žฅ ์žฅ์น˜์— ์ด์ง„(Binary) ํ˜•ํƒœ๋กœ ์ €์žฅ๋จ!"

์ž์„ธํ•œ ๋‚ด์šฉ์„ ๋ณด์‹ค๊ฑฐ๋ฉด ๋ฐ‘์— ๋งํฌ๋กœ ๋“ค์–ด๊ฐ€์…”์„œ ์ดˆ๋ฐ˜ ๋ถ€๋ถ„๋งŒ ๋ณด์„ธ์š” ใ…Ž

 

Computer Architecture

1. ์ปดํ“จํ„ฐ ๊ตฌ์กฐ(Computer Architecture) ์ปดํ“จํ„ฐ ๊ณผํ•™์—์„œ๋Š” PC์„ค๊ณ„๋ฅผ ์—ฌ๋Ÿฌ ํ•˜๋“œ์›จ์–ด๊ฐ€ ๊ฐœ๋ฐœ๋˜๊ณ , ์ด๋“ค์„ ์กฐ๋ฆฝํ•ด์„œ ์ปดํ“จํ„ฐ๊ฐ€ ์™„์„ฑํ•œ ๊ฒƒ์ด ์ปดํ“จํ„ฐ ๊ตฌ์กฐ! ๋”๋ณด๊ธฐ ๐Ÿ“œ๊ฐœ์š”๐Ÿ“œ ์ปดํ“จํ„ฐ ๊ตฌ์กฐ(Computer Architecture)

dystopia050119.tistory.com


Compile & Interpreter

์—ฐ์‚ฐ์žฅ์น˜๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์ž‘์„ ์ •์˜ํ•œ ์ผ์ข…์˜ ๋ฌธ์„œ!

ํ”„๋กœ๊ทธ๋žจ์€ ์ €๊ธ‰์–ธ์–ด(์–ด์…ˆ๋ธ”๋ฆฌ์–ด ๋“ฑ)์™€ ๊ณ ๊ธ‰์–ธ์–ด(C ๋“ฑ)๋‚˜๋ˆ„์–ด์ง
์ปดํŒŒ์ผ๋Ÿฌ(Compiler)
CPU๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•  ๋ช…๋ น๋“ค์„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑํ•œ ๊ฒƒ = ์†Œ์Šค ์ฝ”๋“œ(Source Code)
์ด๋ฅผ ์ปดํ“จํ„ฐ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด์˜ ํ˜•์‹์œผ๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ = ์ปดํŒŒ์ผ(Compile)
์ปดํŒŒ์ผ์„ ํ•ด์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์ปดํŒŒ์ผ๋Ÿฌ(Compiler)๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š”๋ฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ GCC, Clang, MSVC!

ํ•œ๋ฒˆ ์ปดํŒŒ์ผ๋˜๋ฉด ๊ฒฐ๊ณผ๋ฌผ์ด ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋‚จ๊ธฐ ๋•Œ๋ฌธ์— ์–ธ์ œ๋“ ์ง€ ์ด๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ๊ฐ™์€ ๋ช…๋ น์„ ์ฒ˜๋ฆฌ๊ฐ€๋Šฅ!

๊ทธ๋Ÿฌ๋‚˜ ๋ชจ๋“  ์–ธ์–ด๊ฐ€ ์ปดํŒŒ์ผ์ด ํ•„์š”ํ•œ๊ฑด ์•„๋‹ˆ๋ฉฐ, ๋Œ€ํ‘œ์ ์œผ๋กœ Python, JavaScript ๋“ฑ์˜ ์–ธ์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ธํ„ฐํ”„๋ฆฌํ„ฐ(Interpreter)
User(I/O, script) ๊ทธ๋•Œ๋งˆ๋‹ค ๋ฒˆ์—ญํ•ด ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ์ž‘์„ฑํ•œ ๊ฒƒ = ์ธํ„ฐํ”„๋ฆฌํŒ…(InterPreting)
์ธํ„ฐํ”„๋ฆฌํŒ…์„ ํ•ด์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด๋Š” ์ธํ„ฐํ”„๋ฆฌํ„ฐ(Interpreter)

์—ฌ๊ธฐ์„  ์œˆ๋„์šฐ PE ๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง๋งŒ ๋‹ค๋ฃฌ๋‹ค๋„ค์š”

๋ฐฐ๊ฒฝ์ง€์‹์œผ๋กœ C์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์–ด๋–ป๊ฒŒ ์‹คํ–‰ํŒŒ์ผ(PE)๋กœ ๋˜๋Š” ์ง€ ํ™•์ธํ•ฉ์‹œ๋‹ค.

Tip) ์œˆ๋„์šฐ ์‹คํ–‰ํŒŒ์ผ๋กœ ์ƒ์„ฑ ์‹œ MSVC ์‚ฌ์šฉ์ด์ง€๋งŒ linux๋Š” GCC๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ


Compile ๊ณผ์ •

C๋Š” ์ „์ฒ˜๋ฆฌ → ์ปดํŒŒ์ผ → ์–ด์…ˆ๋ธ” → ๋งํฌ ํ˜•์‹์œผ๋กœ ๋จ

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ปดํŒŒ์ผ ํ˜•์‹์œผ๋กœ ํ™•์ธํ•ด๋ณผ๊นŒ์š”?


// Name: add.c
#include "add.h"
#define HI 3

int add(int a, int b) { return a + b + HI; }  // return a+b

// Name: add.h
int add(int a, int b);

์ปดํŒŒ์ผ ๊ณผ์ • ์†์— ์ปดํŒŒ์ผ
๐Ÿ’ก์ปดํŒŒ์ผ(Compile) : ์–ด๋–ค ์–ธ์–ด๋กœ ์ž‘์„ฑ๋œ ์†Œ์Šค์ฝ”๋“œ → ๋‹ค๋ฅธ ์–ธ์–ด์˜ ๋ชฉ์  ์ฝ”๋“œ๋กœ ๋ฒˆ์—ญ!
์ด๋Ÿฐ ๋งฅ๋ฝ์—์„œ ์†Œ์Šค ์ฝ”๋“œ → ์–ด์…ˆ๋ธ”๋ฆฌ์–ด / ์†Œ์Šค ์ฝ”๋“œ → ๊ธฐ๊ณ„์–ด ๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ฑฐ ๋ชจ๋‘ ์ปดํŒŒ์ผ!

์ „์ฒ˜๋ฆฌ

์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์†Œ์Šค ์ฝ”๋“œ → ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ์ปดํŒŒ์ผํ•˜๊ธฐ ์ „์—, ํ•„์š”ํ•œ ํ˜•์‹์œผ๋กœ ๊ฐ€๊ณต ๊ณผ์ •

์–ธ์–ด๋งˆ๋‹ค ๋‹ค๋ฅด์ง€๋งŒ ์ปดํŒŒ์ผ ์–ธ์–ด ๋Œ€๋ถ€๋ถ„์€ ์ด์™€ ๊ฐ™์ด ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์„ ๊ฑฐ์นจ

  1. ์ฃผ์„ ์ œ๊ฑฐ : ๊ฐœ๋ฐœ์ž๋“ค์˜ ์ฝ”๋“œ ์ดํ•ด๋ฅผ ๋•๋Š” ๋ฉ”๋ชจ์ง€
    - ์ฃผ์„์€ ํ”„๋กœ๊ทธ๋žจ์˜ ๋™์ž‘๊ณผ ์ƒ๊ด€์ด ์—†์œผ๋ฏ€๋กœ ์ „์ฒ˜๋ฆฌ ๋‹จ๊ณ„์—์„œ ๋ชจ๋‘ ์ œ๊ฑฐ
  2. ๋งคํฌ๋กœ ์น˜ํ™˜ : #define ์œผ๋กœ ์ •์˜ํ•œ ๋ฉ”ํฌ๋กœ๋Š” ์ž์ฃผ ์“ฐ๋Š” ์ฝ”๋“œ๋‚˜ ์ƒ์ˆซ๊ฐ’์„ ๋‹จ์–ด๋กœ ์ •์˜
    - ์ „์ฒ˜๋ฆฌ ๊ณผ์ •์—์„œ ๋งคํฌ๋กœ์˜ ์ด๋ฆ„์€ ๊ฐ’์œผ๋กœ ์น˜ํ™˜
  3. ํŒŒ์ผ ๋ณ‘ํ•ฉ : ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋žจ์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์†Œ์Šค์™€ ํ•ด๋”ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ
    - ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ด๋ฅผ ๋”ฐ๋กœ ์ปดํŒŒ์ผํ•ด ๋ณ‘ํ•ฉํ•˜์ง€๋งŒ, ์–ด๋– ํ•œ ๊ฒฝ์šฐ๋Š” ์ „์ฒ˜๋ฆฌ ๋‹จ๊ณ„์—์„œ ํŒŒ์ผ์„ ํ•ฉ์น˜๊ณ  ์ปดํŒŒ์ผ

gcc -E add.c > add.i ์˜ต์…˜์œผ๋กœ ์†Œ์Šค ์ฝ”๋“œ์˜ ์ „์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธ ๊ฐ€๋Šฅ

๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด

- ์ฃผ์„์ธ //return a+b๊ฐ€ ์‚ฌ๋ผ์ง
- HI(์ƒ์ˆ˜)๊ฐ€ 3์œผ๋กœ ์น˜ํ™˜๋จ 
- add.h์˜ ๋‚ด์šฉ์ด #include์— ์˜ํ•ด ๋ณ‘ํ•ฉ๋จ(์œ„ #๊ฐ’์ด 0์ธ ์• ๋“ค..)

์ปดํŒŒ์ผ(Compile)

C๋กœ ์ž‘์ƒ๋œ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ฒƒ

์ด ๊ณผ์ •์—์„œ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์†Œ์Šค ์ฝ”๋“œ์˜ ๋ฌธ๋ฒ•์„ ๊ฒ€์‚ฌํ•˜๋Š”๋ฐ, ์ฝ”๋“œ์— ๋ฌธ๋ฒ•์  ์˜ค๋ฅ˜ ์‹œ ์ปดํŒŒ์ผ์„ ๋ฉˆ์ถ”๊ณ  ์—๋Ÿฌ ์ถœ๋ ฅํ•จ

๋˜ํ•œ, ๋ช‡๋ช‡ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋ฉด ์ตœ์ ํ™” ๊ธฐ์ˆ ์„ ์ ์šฉํ•œ ํšจ์œจ์ ์ธ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•จ

๐Ÿ’กTip. gcc์—์„œ๋Š” -O -O0 -O1 -O2 -O3 -Os -Ofast -Og ๋“ฑ์˜ ์˜ต์…˜์„ ํ†ตํ•ด ์ตœ์ ํ™” ๊ฐ€๋Šฅ

์˜ˆ์‹œ๋กœ ์•„๋ž˜ ์ด๋ฏธ์ง€๋ฅผ ๋ณด๋ฉด ์•„์‹ค๊ฒ๋‹ˆ๋‹ค. ์ตœ์ ํ™”ํ•˜๋ฉด..

// Name: opt.c
// Compile: gcc -o opt opt.c -O2
 
#include <stdio.h>
 
int main() {
 
  int x = 0;
  for (int i = 0; i < 100; i++) x += i; // x์— 0๋ถ€ํ„ฐ 99๊นŒ์ง€์˜ ๊ฐ’ ๋”ํ•˜๊ธฐ
  printf("%d", x);
}

์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ์˜ฎ๊น€ X, ๋ฐ˜๋ณต๋ฌธ์˜ ๊ฒฐ๊ณผ๋ฅผ x๊ฐ€ ๊ฐ€์งˆ ๊ฐ’์œผ๋กœ ์ง์ ‘ ๊ณ„์‚ฐํ•˜์—ฌ, ์ด๋ฅผ ๋Œ€์ž…!

์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž ์ž‘์„ฑํ•œ ์†Œ์Šค ์ฝ”๋“œ์™€ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๊ฐ™์ง€๋งŒ, ์ตœ์ ํ™”๋ฅผ ํ•˜์—ฌ ์‹คํ–‰์‹œ๊ฐ„๋„ ๋‹จ์ถ•ํ•˜๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ์ฝ”๋“œ ์™„์„ฑ!!

gcc -S add.i -o add.S
Tip) gcc -o ์‹คํ–‰ํŒŒ์ผ๋ช… ์ฝ”๋“œํŒŒ์ผ๋ช… or gcc ์ฝ”๋“œํŒŒ์ผ๋ช… -o ์‹คํ–‰ํŒŒ์ผ๋ช…

์•„๋ž˜์™€ ๊ฐ™์ด "-S" ์˜ต์…˜์„ ์ด์šฉํ•˜๋ฉด ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•  ์ˆ˜ ์žˆ์Œ!!


์–ด์…ˆ๋ธ”

์ปดํŒŒ์ผ๋กœ ์ƒ์„ฑ๋œ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ์ฝ”๋“œ๋ฅผ ELFํ˜•์‹์˜ ๋ชฉ์  ํŒŒ์ผ๋กœ ๋ณ€ํ™˜ ๊ณผ์ •!

๋ฆฌ๋ˆ…์Šค์˜ ์‹คํ–‰ํŒŒ์ผ ํ˜•์‹์€ ELF / ์œˆ๋„์šฐ๋Š” ๋ชฉ์  ํŒŒ์ผ์€ PEํŒŒ์ผ

๋ชฉ์  ํŒŒ์ผ๋กœ ๋ณ€ํ™˜๋˜๊ณ  ๋‚˜๋ฉด ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๊ฐ€ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญ๋˜๊ธฐ์— ํ•ด์„์ด ๋ถˆ๊ฐ€ํ•˜์ฃ ..ใ… 

gcc -c add.S -o add.o
file add.o
hexdump -C add.o

๋ญ, ๊ทธ๋ ‡๋‹ค๊ณ  ์ผ์„ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฑด ์•„๋‹ˆ๊ธฐ์— 16์ง„์ˆ˜๋กœ ํ™•์ธ์šฉ์œผ๋กœ..  

๋์— ELF๋ผ๊ณ  ์‹คํ–‰ ํŒŒ์ผ์ด๋ผ๊ณ  ๋œจ๊ณ  ๋ฒ„์ „ ๋ฐ ํ™˜๊ฒฝ ๊ทธ๋ฆฌ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋ณด์•ˆ ์กฐ๊ฑด ๋‹ค ๋‚˜์˜ค์ฃ  ใ…Ž


๋งํฌ

์—ฌ๋Ÿฌ ๋ชฉ์  ํŒŒ์ผ๋“ค์„ ์—ฐ๊ฒฐํ•˜์—ฌ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ฐ”์ด๋„ˆ๋ฆฌ๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •

๋งํฌ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ ๋ฅผ ๋‹ค์Œ ์ฝ”๋“œ๋กœ ๋ณด์—ฌ๋“œ๋ฆด๊ป˜์š”

// Name: hello-world.c
// Compile: gcc -o hello-world hello-world.c
 
#include <stdio.h>
 
int main() { printf("Hello, world!"); }
 ์œ„ ์ฝ”๋“œ์—์„  printf ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์ง€๋งŒ, printf ํ•จ์ˆ˜์˜ ์ •์˜๋Š” hello-world.c๊ฐ€ ์—†์œผ๋ฉฐ,
libc๋ผ๋Š” ๊ณต์œ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 libc๋Š” gcc์˜ ๊ธฐ๋ณธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฒฝ๋กœ์— ์žˆ์œผ๋ฉฐ, ๋ง์ปค๋Š” ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ printf๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด
libc์˜ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์—ฐ๊ฒฐํ•ด์ค๋‹ˆ๋‹ค. ๋งํฌ๋ฅผ ๊ฑฐ์น˜๊ณ  ๋‚˜๋ฉด ์‹คํ–‰ ๊ฐ€๋Šฅ ํ”„๋กœ๊ทธ๋žจ ์™„์„ฑ!

๋‹ค์Œ์€ add.o๋ฅผ ๋งํฌํ•œ ๋ช…๋ น์–ด์ด๋ฉฐ, ๋งํฌ ๊ณผ์ •์—์„œ ๋ง์ปค๋Š” mainํ•จ์ˆ˜๋ฅผ ์ฐพ๋Š”๋ฐ ์—ฌ๊ธฐ์„  ์—†์œผ๋‹ˆ..

์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด --unresolved-symbols๋ฅผ ์ปดํŒŒ์ผ ์˜ต์…˜์— ์ถ”๊ฐ€ํ•ด์š”

์ฐธ๊ณ ๋กœ linker๋Š” ์“ฐ๊ธฐ ํž˜๋“ค ์ˆ˜ ์žˆ๋Š”๋ฐ.. ์–ด๋Š ์‹ฌ๋ณผ๋ช…์„ ์ฐพ์„ ์ˆ˜ ์—†๋Š”์ง€๋Š” ๊ณต์‹ ๋ฌธ์„œ์—์„œ ํ™•์ธํ•ด๊ฐ€๋ฉฐ, ์ฝ”๋“œ ๊ธฐ์ž…..ใ… 

 

Compiler Reference Guide: --unresolved=symbol

Arm’s Privacy Policy has been updated. By continuing to use our site, you consent to Arm’s Privacy Policy. Please review our Privacy Policy to learn more about our collection, use and transfers of your data. Accept and hide this message

www.keil.com

gcc add.o -o add -Xlinker --unresolved-symbols
file add


๋””์Šค์–ด์…ˆ๋ธ”(๋””์…ˆ๋ธ”) & ๋””์ปดํŒŒ์ผ

๋””์Šค์–ด์…ˆ๋ธ”(Disassemble) : ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋ฅผ ์žฌ๋ฒˆ์—ญํ•˜๋Š” ๊ณผ์ •์œผ๋กœ ์–ด์…ˆ๋ธ”์˜ ์—ญ๊ณผ์ •
๋””์ปดํŒŒ์ผ๋Ÿฌ(Decompiler) : ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋ณด๋‹ค ๊ณ ๊ธ‰ ์–ธ์–ด๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฒˆ์—ญ

ํƒ„์ƒ ๋ฐฐ๊ฒฝ


๋””์Šค์–ด์…ˆ๋ธ”(Disassemble)์˜ ํƒ„์ƒ๋ฐฐ๊ฒฝ

๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋ถ„์„ํ•˜๋ ค๋ฉด ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์ฝ์–ด์•ผํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ปดํŒŒ์ผ๋œ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๋Š”

๊ธฐ๊ณ„์–ด๋กœ ๋˜์–ด ์žˆ๊ธฐ์— ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฏ€๋กœ, ๋ถ„์„๊ฐ€๋“ค์€ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋ฅผ ์žฌ๋ฒˆ์—ญํ•ด ๋ถ„์„ํ•˜๊ธฐ ์œ„ํ•จ!

01

๋””์ปดํŒŒ์ผ๋Ÿฌ(Decompiler)

๋””์…ˆ๋ธ”์˜ ๊ธฐ์ˆ ๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ถ„์„์ด ์ด์ „๋ณด๋‹ค ์šฉ์ดํ•ด์กŒ์œผ๋‚˜, ๊ทœ๋ชจ๊ฐ€ ํฐ ๋ฐ”์ด๋„ˆ๋ฆฌ์—์„ ...

๊ทธ๋ž˜์„œ ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋“ค์€ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋ณด๋‹ค ๊ณ ๊ธ‰ ์–ธ์–ด๋กœ ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๋ถ„์„ํ•˜๊ธฐ๋กœ ํ•ด ๊ฐœ๋ฐœ!

์–ด์…ˆ๋ธ”๋ฆฌ์–ด์™€ ๊ธฐ๊ณ„์–ด๋Š” ๊ฑฐ์˜ 1๋Œ€1๋กœ ๋Œ€์‘๋˜์–ด ์˜ค์ฐจ์—†๋Š” ๋””์…ˆ๋ธ”์„ ๊ฐœ๋ฐœ๊ฐ€๋Šฅํ•˜๋‚˜, ๊ณ ๊ธ‰์–ธ์–ด์™€ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด ์‚ฌ์ด์—” ์ด๋Ÿฐ ๋Œ€์‘๊ด€๊ณ„๊ฐ€ ์—†์–ด์š”.. ๋˜ํ•œ ์ฝ”๋“œ์˜ ์ผ๋ถ€๋ถ„์€ ์ตœ์ ํ™”๋กœ ์™„์ „ํžˆ ๋ณ€์˜๋˜์ฃ 

 ์ด๋Ÿฐ ์–ด๋ ค์›€ ๋•Œ๋ฌธ์— ๋ถ„์„ ํšจ์œจ์„ ๋†’์„๋ผ๋ฉด ๋””์…ˆ๋ธ”์ด ์œ ๋ฆฌํ•˜์ฃ  ํŠนํžˆ ์š”์ฆ˜์€ Hex Rays, Ghidra๋ฅผ ๋น„๋กฏํ•œ ๋›ฐ์–ด๋‚œ ๋””์ปดํŒŒ์ผ๋Ÿฌ๋“ค์ด ๊ฐœ๋ฐœ๋˜์–ด ๋ถ„์„์˜ ํšจ์œจ๋„ ๋†’์—ฌ์ฃผ์–ด์š”

์ •๋ฆฌ

  • ํ”„๋กœ๊ทธ๋žจ : ์ปดํ“จํ„ฐ๊ฐ€ ์‹คํ–‰ํ•ด์•ผ ํ•  ๋ช…๋ น์–ด์˜ ์ง‘ํ•ฉ, ๋ฐ”์ด๋„ˆ๋ฆฌ๋ผ๊ณ ๋„ ๋ถˆ๋ฆผ
  • ์ „์ฒ˜๋ฆฌ : ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ์ปดํŒŒ์ผ์— ํ•„์š”ํ•œ ํ˜•์‹์œผ๋กœ ๊ฐ€๊ณต๋˜๋Š” ๊ณผ์ •
  • ์ปดํŒŒ์ผ : ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ณผ์ •

  • ์–ด์…ˆ๋ธ” : ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฒˆ์—ญํ•˜๊ณ , ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ˜•์‹์˜ ๋ณ€ํ˜•ํ•˜๋Š” ๊ณผ์ •
  • ๋งํฌ : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ชฉ์  ํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ๋ฌถ๊ณ , ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ณผ์ •
  • ๋””์…ˆ๋ธ” : ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ณผ์ •

  • ๋””์ปดํŒŒ์ผ: ๋ฐ”์ด๋„ˆ๋ฆฌ๋ฅผ ๊ณ ๊ธ‰ ์–ธ์–ด๋กœ ๋ฒˆ์—ญํ•˜๋Š” ๊ณผ์ •

gcc ์ฐธ๊ณ  ์ž๋ฃŒ

012


์ฐธ๊ณ  ์ž๋ฃŒ

 

Background: Binary

๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์ •์˜์™€ ์ปดํŒŒ์ผ ๊ณผ์ •์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

dreamhack.io

์ฐธ๊ณ  ์ด๋ฏธ์ง€

 

Background: Binary

๋ฐ”์ด๋„ˆ๋ฆฌ์˜ ์ •์˜์™€ ์ปดํŒŒ์ผ ๊ณผ์ •์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

dreamhack.io

๋”๋ณด๊ธฐ