SECURITY/REVERSING

์ปดํŒŒ์ผ ๊ณผ์ • (C์–ธ์–ด) : ์ „์ฒ˜๋ฆฌ, ์ปดํŒŒ์ผ, ์–ด์…ˆ๋ธ”, ๋งํฌ

\b\t 2020. 7. 20. 00:12

์ปดํŒŒ์ผ ๊ณผ์ •

 

1) ์ „์ฒ˜๋ฆฌ - hello.c -> hello.i

 

: ์ „์ฒ˜๋ฆฌ๊ธฐ (Preprocessor) ๋กœ ์ปดํŒŒ์ผ ์ „์— ์ฝ”๋“œ๋ฅผ ์ ์ •ํ•œ ์ƒํƒœ๋กœ ์ค€๋น„ํ•˜๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌํ•˜๋Š” ์ผ

 

์ „์ฒ˜๋ฆฌ๊ธฐ ๊ตฌ๋ฌธ: # ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๊ตฌ๋ฌธ

 

ex. #include <stdio.h> 

    #define STD 10

 

์ด์™€ ๊ฐ™์€ ์ „์ฒ˜๋ฆฌ๊ธฐ ๊ตฌ๋ฌธ์œผ๋กœ ํ•„์š”ํ•œ ํ—ค๋”ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๊ฑฐ๋‚˜,

๊ธฐํ˜ธ ์ƒ์ˆ˜๋ฅผ ์ •์˜ํ•ด์„œ ์ฝ”๋“œ ์ƒ์œผ๋กœ ํ•„์š”ํ•œ ๋‚ด์šฉ์„ ๋จผ์ € ์ฑ„์›Œ์ฃผ๋Š” ์—ญํ• ์ด๋‹ค.

 

 

์ž์„ธํžˆ ์‚ดํŽด๋ณด๋ฉด,

 

์ „์ฒ˜๋ฆฌ๊ธฐ๋Š” #include ๊ตฌ๋ฌธ์„ ๋งŒ๋‚˜๋ฉด ํ•ด๋‹นํ•˜๋Š” ํ—ค๋” ํŒŒ์ผ์„ ์ฐพ์•„ ๊ทธ ๋‚ด์šฉ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์‚ฝ์ž…ํ•œ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  #define ๋ถ€๋ถ„์„ ์‹ฌ๋ณผ ํ…Œ์ด๋ธ”์— ์ €์žฅํ•˜๊ณ , ์‹ฌ๋ณผ ํ…Œ์ด๋ธ”์— ๋“ค์–ด ์žˆ๋Š” ๋ฌธ์ž์—ด๊ณผ ๊ฐ™์€ ๋‚ด์šฉ์„ ๋งŒ๋‚˜๋ฉด ํ•ด๋‹น ๋‚ด์šฉ์œผ๋กœ ์น˜ํ™˜ํ•œ๋‹ค. (๋งคํฌ๋กœ ์น˜ํ™˜ ์ž‘์—…. #ifdef ์™€ ๊ฐ™์€ ์ „์ฒ˜๋ฆฌ๊ธฐ ๊ตฌ๋ฌธ๋„ ์ฒ˜๋ฆฌ๋จ)

 

 

 

2) ์ปดํŒŒ์ผ - hello.i -> hello.s

: ์ปดํŒŒ์ผ๋Ÿฌ (Compiler) ๊ฐ€ ๊ณ ์ˆ˜์ค€ ์–ธ์–ด๋ฅผ ์ €์ˆ˜์ค€ ์–ธ์–ด๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ์ผ

์†Œ์Šค ํ”„๋กœ๊ทธ๋žจ์„ ๋ชฉ์ (object) ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ์ž‘์—…์ด๋‹ค.

 

์ฆ‰, ์šฐ๋ฆฌ๊ฐ€ c์–ธ์–ด๋กœ ์—ด์‹ฌํžˆ ์ฝ”๋”ฉํ•œ ๋‚ด์šฉ์„ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค!

 

์ปดํŒŒ์ผ ์˜ค๋ฅ˜๋Š” ๋ฌธ๋ฒ• ์˜ค๋ฅ˜๋กœ, ์†Œ์Šค ํŒŒ์ผ์„ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.

 

 

3) ์–ด์…ˆ๋ธ” - hello.s -> hello.o

: ์–ด์…ˆ๋ธ”๋Ÿฌ (Assembler) ๊ฐ€ ์–ด์…ˆ๋ธ”๋ฆฌ์–ด๋ฅผ ๊ธฐ๊ณ„์–ด๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ์ผ

์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค. 

 

 

4) ๋งํฌ - hello.o -> hello.exe

: ๋ง์ปค (Linker) ๊ฐ€ ์—ฌ๋Ÿฌ ์˜ค๋ธŒ์ ํŠธ ํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ํ•ฉ์น˜๊ฑฐ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ํ•ฉ์น˜๋Š” ์ผ

์ฆ‰, ๋ชฉ์  ํ”„๋กœ๊ทธ๋žจ์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ์—ฐ๊ฒฐํ•˜์—ฌ ์‹คํ–‰ ํ”„๋กœ๊ทธ๋žจ(.exe)์„ ์ž‘์„ฑํ•œ๋‹ค.

 

* ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(library) : ํ”„๋กœ๊ทธ๋ž˜๋จธ๋“ค์ด ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋ฏธ๋ฆฌ ์ž‘์„ฑํ•ด ๋†“์€ ๊ฒƒ

e.x ์ž…์ถœ๋ ฅ, ํŒŒ์ผ ์ฒ˜๋ฆฌ, ์ˆ˜ํ•™ ํ•จ์ˆ˜ ๋“ฑ๋“ฑ