โน๏ธ Skipped - page is already crawled
| Filter | Status | Condition | Details |
|---|---|---|---|
| HTTP status | PASS | download_http_code = 200 | HTTP 200 |
| Age cutoff | FAIL | download_stamp > now() - 6 MONTH | 7.3 months ago |
| History drop | PASS | isNull(history_drop_reason) | No drop reason |
| Spam/ban | PASS | fh_dont_index != 1 AND ml_spam_score = 0 | ml_spam_score=0 |
| Canonical | PASS | meta_canonical IS NULL OR = '' OR = src_unparsed | Not set |
| Property | Value |
|---|---|
| URL | https://eeeuns.github.io/2024/08/09/understandingcomputercompileo/ |
| Last Crawled | 2025-09-06 08:03:18 (7 months ago) |
| First Indexed | not set |
| HTTP Status Code | 200 |
| Meta Title | C์ธ์ด๊ฐ cpu์ ์๋ํ๊ธฐ๊น์ง ์ฌํ : ์ปดํ์ผ โ eeeuns โ EUnS's blog |
| Meta Description | ๊ธฐ๋ณธ๊ธ |
| Meta Canonical | null |
| Boilerpipe Text | ๊ธฐ๋ณธ๊ธ์ ์ฐ๊ณ ๋ด๊ฐ ์๋ ๋ชจ๋ ๊ฑธ ์ฐ๊ฒ ๋ค๋ ์๊ฐ์ ์๋ ๋ถํฐ ํด์๋ค.
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์ฑ์ ์ด๋ ๊ฒ ๋๊ฐ์ง๋ก ํ๋ ค๊ณ ํ๋๋ฐ.. ์ปดํ์ผ ๊ณผ์ ์ค์ ์คํ ๊ณผ์ ๋ง์ปค๊ธ์ด ๊ต์ฅํ ๊ด์ฐฎ์ ๊ธ์ด ์์ด์ ๋งํฌ๋ก๋ง ๋ฌ๊ณ ํ์น๊ณ ์๋ค๊ฐ,
์ด๋ฒ์ ์ด๋ค ๊ณ๊ธฐ๋ก ์ปดํ์ผ ๊ณผ์ ์ ์ฐ๊ณ ์๋ค ๋ด์ฉ์ด ๋๋ฌด ๋ง์์ง๊ณ ์ปดํ์ผ ๊ธ์ ๋ค ์์ฑํ๊ณ ์ฌ๋ฆฌ๋ ค๋ ์ธ์ ์์ฑ๋ ์ง ๊ฐ๋ ์์กํ๊ธฐ์ ์ง๋ฅผ์์ ์ ์ ๋ฐ๋ถ๋ฅผ ์ฌ๋ฆฐ๋ค..(์์ ํ์น ๊ธ์ ๋ ๋ ธ๋ค)
๊ทธ๋ฆฌ๊ณ ๋จ์ ๋ด์ฉ๋ค์ด C์ธ์ด๊ฐ cpu์ ์๋ํ๊ธฐ๊น์ง๋ผ๋ ์ฃผ์ ์ ์ข ๋ฒ์ด๋ ์๊ธฐ๋ค์ด๋ผ ๋ณ๊ฐ์ posting ์ผ๋ก ์ฌ๋ฆฌ๋ ค๊ณ ํ๋ค. ์ด๋ฒ ๋ด์ฉ์ ๋๋ถ๋ถ CSAPP ๋ง์ปค ์ฅ์ ํด๋นํ๋ ๋ด์ฉ๋ค์ด๋ค. ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ ์ฒด ์ด๋ฏธ์ง ์ ๊ณผ์ ์ ์ฒด๋ฅผ ํด์ฃผ๋ ์ฃผ์ฒด๋ฅผ ์ปดํ์ผ๋ฌ๋ผ๊ณ ํ๋ค. (hello.c๋ฅผ ์ปดํ์ผํ์ฌ hello๋ฅผ ๋ฑ์ด์ฃผ๋ ์ฃผ์ฒด) ํ์ฌ ๋ง์ด ์ฌ์ฉํ๋ ์ปดํ์ผ๋ฌ๋ ๋ํ์ ์ผ๋ก ์ธ ๊ฐ ์ ๋๊ฐ ์๋ค. MSVC (Microsoft Visual Complier) : windows Visual studio ide๋ฅผ ์ฌ์ฉํ ๋ ์ฃผ๋ก ์ฌ์ฉ Clang GCC ์์ ์ฌ์ง์์ ๋ณดํต ๊ฐ์ฅ ํฌ๊ฒ ๋ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค ์ปดํ์ผ์ ์ํฉ์๋ฐ๋ผ์ ๋๊ฑฐ๋ ์ข์ ์๋ฏธ๋ก ์ธ ์ ์๋๋ฐ ์๋๋ก ๊ฐ์๋ก ์ข์ ์๋ฏธ์ด๋ค. ์ฝ๋๋ฅผ ์ปดํ์ผํ์ฌ ์คํํ์ผ์ ๋ฑ๋ ์ ์ฒด ๊ณผ์ ์ ํธ์นญํ๋ค. ์ ์ด๋ฏธ์ง ์ ์ฒด ๊ณผ์ ๋งจ ๋ง์ง๋ง ๋ง์ปค๋จ๊ณ๋ฅผ ์ ์ธํ๊ณ ๊ตฌ๋ถํ์ฌ ์ปดํ์ผ, ๋ง์ปค๋ก ๊ตฌ๋ถํ์ฌ ํธ์นญํ๊ธฐ๋ํ๋ค. ๋ ์ธ๋ถ์ ์ผ๋ก ๋งคํฌ๋ก ์์
์ด ๋๋ํ ์ด์
ํ์ผ๋ก ๋ฑ๋ ๊ณผ์ ์ ์ปดํ์ผ์ด๋ผ๊ณ ๋ ํ๋ค. ๊ธ์์๋ 1, 2์ ์๋ฏธ๋ฅผ ํผ์ฉํ์ฌ ์ฌ์ฉํ ๊ฒ์ด๋ค. ๊ฐ๋จํ๊ฒ ๋ง์ปค๋ฅผ ์ ์ธํ ์ปดํ์ผ ์ ์ฒด ๊ณผ์ ์ ํ๋ฒ ํ๊ณ ๋์ด๊ฐ์. Preprocessor ๋งคํฌ๋ก ๋ช
๋ น์ด๋ฅผ ์ฒ๋ฆฌํ๋ค ์ฌ๊ธฐ์ ๋์จ ๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ์ง๊ณ ์ค์ ๋ก ์ปดํ์ผํ๋ ํ์ผ ๊ทธ ์์ฒด๋ผ๊ณ ์๊ฐํ๋ฉด ์ข๋ค. ์ง์ง ์ ์ฒ๋ฆฌ๋ค. #define symbol ์ซ์ ์ด๋ฐ๊ฑฐ๋ ์ค์ symbol์ ์ซ์๋ก ๋ณ๊ฒฝ๋์, ์ฝ๋์์ ์ ๋ณด๋ก ๋จ์ง์๊ธฐ์ ๋๋ฒ๊น
์์ ์ฐธ๊ณ ๊ฐ ์์ ์๋๋ ๋ฌธ์ ๊ฐ ์๋ค. ifdef ๋ก ๊ฑธ๋ฌ์ง define์ด๋ ์ฝ๋๋ค์ ์ค์ ๋ก ์คํํ์ผ์ ์๋ ์ฝ๋ ๊ฐ ๋๋ค. ๋งค์ฐ ์ค์ํ ์ ๋ณด, ๋ก์ง์ด๋ผ์ ๋ฐฐํฌ ์คํํ์ผ์ ๋ค์ด๊ฐ๋๊ฒ์์ฒด๊ฐ ๋ฌธ์ ๊ฐ ๋๋ ์ผ์ด์ค๋ ์์ ํด๋น ๋จ๊ณ์์ ์ ์ธ๋ฅผ ์์ผ์, ์์ ๋ฐฐํฌํ์ผ์์ ์ ์ธ๋ฅผ ์์ผ๋ฒ๋ฆด ์ ์๋ค. #include๋ ์ง์ง๋ก ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ๋ค. ํค๋๋ ๊ด์ฉ์ ๋ถ์ง .h๋ ํ์ฅ์๊ฐ ์๋์ด๋๋๋ค. ๊ฐ ๋จ๊ณ๋ฅผ ์ ํํ ์ดํดํ๋ค๋ฉด cpp ํ์ผ์ includeํด๋ ์ ์๋ํด์ผํ๋ค. ์์ Cpp ํ๋ก์ ํธ๋ฅผ ์ปดํ์ผํ๋ค๊ณ ์๊ฐํด๋ณด์. ์ธ cppํ์ผ๊ณผ ์ฐ์ธก์ stdafx.hํ์ผ์ include ์ํ์ด๋ค. ์ค์ ์ ์ฒ๋ฆฌ๋ฅผ ํตํ ํ์ผ ํฌ๊ธฐ๋ ์๋์ ๊ฐ๋ค. ๋ด๊ฐ ์์ฑ์ 30์ค์ ํ๋๋ผ๋ ์ฌ๊ธฐ์ includeํ๋ ํค๋ํ์ผ์ด 2๋ง ์ค ์ ๋ ๋๋ฉด ์ค์ ๋ก๋ 2๋ง 30์ค์ง๋ฆฌ Cppํ์ผ์ ์ปดํ์ผ ํ๋ ์ํฉ์ด ๋๋ค. Compiler ์ค์ ๋ก ์ด์
๋ธ๋ฆฌ์ด๋ก ๋ณํํ๋ ๊ณผ์ ์คํ ์ฝ๋๋ฅผ ์ด์
๋ธ๋ฆฌ์ด๋ก ๋ณํํ๊ณ , ์ฌ๋ณผ๋ค์๋ํด์ ํ
์ด๋ธ์ ๋ง๋ ๋ค. ๊ฒฐ๊ณผ๋ฌผ์ ์ด์
๋ธ๋ฆฌ์ด๋ค. ํด๋น ๊ฒฐ๊ณผ๋ฌผ์ด ์ฐ๋ฆฌ๊ฐ ๋ง์ง๋ง์ผ๋ก ๊ทธ๋๋ง ์ฝ์ ์ ์๋ ํ์ผ ์ค ๊ฐ์ฅ ๊ธฐ๊ณ์ด์ ๊ฐ๊น๋ค. ์์ธํ๋ ๋ณดํต ์ปดํ์ผ๋ฌ ์์
์์ ๋ค๋ฃจ๋ ๊ตฌ๋ฌธ ๋ถ์์ด ์ฃผ์ ํต์ฌ์ผ๋ก ์์ฉํ๋ค. ์ด ๋ค์๋ถํฐ ๊ฒฐ๊ณผ๋ฌผ์ ์ด์ง ํ์ผ์ด๋ค. Assembler ์ด์
๋ธ๋ฆฌ์ด๋ฅผ ์ด์ง ํ์ผ๋ก ๋ณํํ๋ค. ์ฌ๊ธฐ์๋ถํฐ๋ ๊ฐ๋จํ ํ์ผ์ ์คํํ์ผ์ด ๋ ์๋ ์๋ค. ์ด ๊ฒฐ๊ณผ๋ฌผ์ object ํ์ผ์ด๋ผ๊ณ ํ๋ค. ์ปดํ์ผ๋ฌ๋ ๋จ์ผ Cpp ํ์ผ์ ํ๋ฒ์ฉ ์ปดํ์ผํ์ฌ objectํ์ผ์ ๋ฝ์๋ด๊ณ N๊ฐ์ cppํ์ผ์ ๋ํด์ N๊ฐ์ objectํ์ผ์ ๋ฝ์๋ด๊ณ N๊ฐ์ objectํ์ผ์ ๋งํนํ์ฌ 1๊ฐ์ ์จ์ ํ ์คํํ์ผ์ ๋ฝ์๋ด๋ ๊ณผ์ ์ด๋ค. ์ ์ฌ๊ธฐ๊น์ง ์๋ก ์ด ๋๋ฌ๋ค. object ํ์ผ์ ํฌ๊ฒ ์ธ๊ฐ์ง ์ข
๋ฅ๊ฐ ์๋ค. reloacatable object file ์ฌ๋ฐฐ์น ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ ํ์๊ฐ ์์ด์ ์คํํ์ผ์ด ๋ชป ๋ ํ์ผ์ด๋ค. a.cpp์ ์ปดํ์ผํ๋๋ฐ a.cpp ์์ ํธ์ถํ ํจ์ func() ๊ฐ b.cpp ํ์ผ์ ๊ตฌํ๋์ด ์๋ ๊ฒฝ์ฐ ํด๋น ํจ์์ ์ปดํ์ผ ํ ์ ์์ผ๋ ์คํํ์ผ์ด ๋ ์ ์๋ ์ํฉ์ด๋ค. ์ด๋ฐ ๋ชฉ์ ํ์ผ์ ๋ชจ์์ ๋งํน์ ํ๋ฉด ์คํ ํ์ผ์ด ๋ ์ ์๋ค. ๋ฆฌ๋
์ค gcc์์ ๋ณดํต .o ํ์ฅ์์ ์ฌ์ฉํ๊ณ windows msvc ์์๋ .obj ํ์ผ ํ์ฅ์์ด๋ค. excuteable object file ์คํ ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ ์คํ ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ต์ข
๊ฒฐ๊ณผ์ธ ์คํํ์ผ์ด๋ค.
windows์์๋ .exe ํ์ฅ์, linux์์๋ .out ํ์ฅ์(๊ผญ ๊ทธ๋ ์ง ์๋ค)์ด๋ค. ์คํ ํ์ผ์ ์ค์ ๋ก ์คํํ๋ ๊ฒ์ ์ด์์ฒด์ ์ ๋ด๋น์ธ์ง๋ผ ํ์ผ ํ์์ ์ด์์ฒด์ ๊ฐ ์ ํ ํ์์ ์ข
์๋๋ค. windows์ ์คํ ํ์ผ์ linux์์ ์คํ ๋ถ๊ฐ๋ฅํ๋ค. Linking๋จ๊ณ๊น์ง ๊ณ ๋ คํ์ฌ object ํ์ผ ํฌ๋งท์ด OS์ ์ข
์๋๋๋ฐ linux์์ ๋ชฉ์ ํ์ผ ํฌ๋งท์ ELF(Executable and Linkable Format ) ํฌ๋งท์ด ๋ผํ๊ณ Windows ์์๋ PE Format(Portable Exceuteable)์ด๋ผ ํ๋ค. Shared object file ๊ณต์ ๋ชฉ์ ํ์ผ ๋ด๊ฐ ์์ฑํ ์ฝ๋๊ฐ ๋์ ํ๋ก์ ํธ ๋ง์ด ์๋ ์์ ํ์ธ์๊ฒ๋ ์ฝ๋๋ฅผ ๊ณต์ ํ๊ธฐ์ํด์ ์์ฑํ Cppํ์ผ์ ๋ชจ๋ ๋ฐ์์ ์ปดํ์ผ๊น์ง ๋ง์ถฐ์ ์ธํ
ํ๋๊ฒ์ ๋นํจ์จ์ ์ด๋ค. ์ฌ์ค์ ๋ณ๊ฒฝ๋์ง์๋ ์ฝ๋๋ฅผ ์ปดํ์ผํ๋๊ฒ์กฐ์ฐจ ๋นํจ์จ์ ์ด๋ค. ๋ฌถ์ธ ํ์ผ์ ํ๋๋ง ์ ๋ฌ๋ฐ์์ ์ฌ์ฉํ๋ฉด ๋์ง์์๊น ํ๋ ์์ด๋์ด์์ ์ถ๋ฐ ๋ค์์ ๋ ์์ธํ๊ฒ ์ค๋ช
์ค์ PE File ๊ณต์ ๋ฌธ์ : https://learn.microsoft.com/ko-kr/windows/win32/debug/pe-format?redirectedfrom=MSDN ๋ณธ Windows ์์ ์คํํ์ผ์ ์ด๋ฏธ์ง/PE(์ด์ ๊ฐ๋ฅํ ์คํ ํ์ผ) ํ์ผ, ์ฌ๋ฐฐ์น ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ์ ๊ฐ์ฒด /COFF(๊ณต์ฉ ๊ฐ์ฒด ํ์ผ ํ์) ํ์ผ ์ด๋ผ๊ณ ํ๋ค. ์์ธํ๊ฒ๋ ๋ช
์นญ ๋ฑ ์ฐจ์ด๊ฐ ์์ง๋ง ์ ์ฒด์ ์ธ ์น์
๊ฐ์๋ ELF์ ๋น์ทํ ๊ตฌ์กฐ์ด๋ค. ELF ์ฌ๋ฐฐ์น ํ์ผ ๊ตฌ์กฐ ๊ฐ ๊ตฌ์ญ ๋ณ๋ก Section์ด ๋๋๋ค. ๋ชฉ์ ํ์ผ ์ ์ฒด์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ๋ค๊ฐ์ง .bss : ์ด๊ธฐํ๋์ง ์์ ์ ์ญ๋ณ์์ ์ ์ ๋ณ์ .data : ์ด๊ธฐํ๋ ์ ์ญ๋ณ์ ๋ฐ ์ ์ ๋ณ์ .rdata : ์ด๊ธฐํ๋ ์ฝ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ (์คํธ๋ง), ์ค์์น ์ผ์ด์ค ์ ํ ํ
์ด๋ธ .text : ๋ช
๋ น์ด ๋จธ์ ์ฝ๋ ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์์์ ์ต์ํ ์ ๋ด์ฉ์ ํด๋น ํ๋ section์ด๋ค. .debug ์น์
๋๋ฒ๊ทธ ๋๋ ํฐ๋ฆฌ .debug$F(๊ฐ์ฒด๋ง ํด๋น) .debug$S(๊ฐ์ฒด๋ง ํด๋น) ์ด ์น์
์๋ Visual C++ ๋๋ฒ๊ทธ ์ ๋ณด(์ฌ๋ณผ ์ ๋ณด)๊ฐ ํฌํจ .debug$P(๊ฐ์ฒด๋ง ํด๋น) ์ด ์น์
์๋ Visual C++ ๋๋ฒ๊ทธ ์ ๋ณด(๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ์ ๋ณด)๊ฐ ํฌํจ. ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ํค๋๋ฅผ ํตํด ์ปดํ์ผ๋ ๋ชจ๋ ๊ฐ์ฒด ๊ฐ์ ๊ณต์ ๋๋ ํ์ .debug$T(๊ฐ์ฒด๋ง ํด๋น) ์ด ์น์
์๋ Visual C++ ๋๋ฒ๊ทธ ์ ๋ณด(ํ์ ์ ๋ณด)๊ฐ ํฌํจ Microsoft ๋๋ฒ๊ทธ ์ ๋ณด์ ๋ํ ๋ง์ปค ์ง์ ๋๋ฒ๊ทธ ์ ๋ณด๋ฅผ ์ง์ํ๊ธฐ ์ํด ๋ง์ปค์์ ๋ค์์ ์ํํฉ๋๋ค. .debug$F ,ย debug$S ,ย .debug$P ย ๋ฐย .debug$T ย ์น์
์์ ๋ชจ๋ ๊ด๋ จ ๋๋ฒ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์์งํฉ๋๋ค. ๋ง์ปค์์ ์์ฑํ ๋๋ฒ๊น
์ ๋ณด์ ํจ๊ป ํด๋น ๋ฐ์ดํฐ๋ฅผ PDB ํ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , ์ด๋ฅผ ์ฐธ์กฐํ๋ ๋๋ฒ๊ทธ ๋๋ ํฐ๋ฆฌ ํญ๋ชฉ์ ๋ง๋ญ๋๋ค. . edata : (์ด๋ฏธ์ง๋ง ํด๋น) : ๋ด๋ณด๋ด๊ธฐ ๋ฐ์ดํฐ ์น์
.
๋ค๋ฅธ ์ด๋ฏธ์ง์์ ๋์ ๋งํฌ๋ฅผ ํตํด ์ก์ธ์คํ ์ ์๋ ์ฌ๋ณผ์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ .reloc ์น์
(์ด๋ฏธ์ง๋ง ํด๋น) : ์ด๋ฏธ์ง์ ๋ชจ๋ ๋ฒ ์ด์ค ์ฌ๋ฐฐ์น์ ๋ํ ํญ๋ชฉ์ด ํฌํจ .drectve (๊ฐ์ฒด๋ง ํด๋น) : IMAGE_SCN_LNK_INFO ์ธํ
๋์ด์์ด์ผํจ ** ๋ง์ปค ์ต์
.idata ์น์
: ์ฌ๋ณผ ๊ฐ์ ธ์ค๊ธฐ ์ ๋ณด .pdata ์น์
: ์์ธ ์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ ํจ์ ํ
์ด๋ธ ํญ๋ชฉ์ ๋ฐฐ์ด .tls ์น์
: ์ค๋ ๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง ํ
์ด๋ธ ์ฃผ์ ๋ฐ ํฌ๊ธฐ .rsrc ์น์
: ๋ฆฌ์์ค ๋ฐ์ดํฐ (GUI ํ๋ก๊ทธ๋จ์์ ๋ง์ด ๋ณผ ์ ์๋ ์น์
, ๊ทธ๋ํฝ ์ ๋ณด ์ ์ฅ) .sxdata ์น์
.cormeta ์น์
(๊ฐ์ฒด๋ง ํด๋น) ๋ํ ๊ฐ์ฒด ํ์ผ์ ๊ฐ ์น์
๋ง๋ค COFF ์ฌ๋ฐฐ์น(๊ฐ์ฒด๋ง ํด๋น) ์ ๊ฐ์ง๊ณ ์๋ค. ์ฃผ์ ์ง์ ์ด ํ์ํ ์ฌ๋ณผ์๋์ค์ ํด๋น ์ฌ๋ณผ์ ์ฃผ์๋ฅผ ์จ๋ฃ๊ธฐ ์ํ ์ฃผ์๋ฅผ ๊ธฐ์
ํ๊ธฐ ์ํ offset์ ๊ธฐ๋กํ๋ ํ
์ด๋ธ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ผ ๋ง์ง๋ง์ COFF ์ฌ๋ณผ ํ
์ด๋ธ์ด ์กด์ฌํ๋ค ์ฌ๋ฌ๊ฐ์ ์ค๋ธ์ ํธ ํ์ผ์ ํ๋์ ์คํ๊ฐ๋ฅํ ์ค๋ธ์ ํธ ํ์ผ๋ก ํฉ์ณ๋ฒ๋ฆฐ๋ค. ๋ง์ปค๋ ๋๋จ๊ณ๋ก ์งํ๋๋ค. Symbol resolution ์ฌ๋ณผ ํด์
๊ฐ ์ฌ๋ฐฐ์น ๋ชฉ์ ํ์ผ์ ์ฌ๋ณผํ
์ด๋ธ์ ํฉ์ณ์ ์์ ํ ํ๋์ ์ฌ๋ณผ ํ
์ด๋ธ ์ํธ๋ฆฌ๋ฅผ ๊ฐ์ง๋ค. Relocation ์ฌ๋ฐฐ์น : ์๋จ๊ณ์ ์ฌ๋ณผ ํ
์ด๋ธ ์ํธ๋ฆฌ๋ฅผ ํตํด์ ์ค์ ๋ก ์ฌ๋ณผ์ ์ฃผ์๋ฅผ ํ ๋นํ๋ค. ์น์
๊ณผ ์ฌ๋ณผ ์ ์๋ฅผ ์ฌ๋ฐฐ์น : ๊ฐ ํ์ผ๋ง๋ค ๊ฒน์น๋ ์น์
์ ํ๋์ ๋จ์ผํ๋ ์น์
์ผ๋ก ํฉ์น๋ค. ์น์
๋ด ์ฌ๋ณผ ์ฐธ์กฐ๋ฅผ ์ฌ๋ฐฐ์น : ๋ชจ๋ ์ฌ๋ณผ ์ฐธ์กฐ๋ฅผ ์์ ํ์ฌ ์ ํํ ์ฃผ์๋ฅผ ๊ฐ๋ฅดํค๋๋ก ์์
๋๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
PC ์๋ ์ฐธ์กฐ์ ์ฌ๋ฐฐ์น : PC (Program Counter)์ ๊ธฐ์ค์ผ๋ก ๊ธฐ๋กํ๋ ๋ฐฉ์ ์ ๋ ์ฐธ์กฐ์ ์ฌ๋ฐฐ์น : ์ ๋์ ์ธ ๋ณ์, ํจ์์ ์ฃผ์๊ฐ์ ์ง์ ๋ฐ์ ๊ธฐ๋กํ๋ ๋ฐฉ์ ์ด ์ฒ๋ฆฌ๋ฅผ ์ํด์ ๋ฆฌ๋
์ค์์๋ ๊ฐํ์ฌ๋ณผ๊ณผ ์ฝํ ์ฌ๋ณผ์ด๋ผ๋ ๊ฐ๋
์ด ๋ฑ์ฅํ๋ค. strong symbol ๊ฐํ ์ฌ๋ณผ : ์ด๊ธฐํ๋ ์ ์ญ๋ณ์ weak symbol ์ฝํ ์ฌ๋ณผ : ์ด๊ธฐํ๋์ง์์ ์ ์ญ๋ณ์ ๊ท์น ๋์ผํ ์ด๋ฆ์ ๊ฐ๋ ๋ณต์์ ๊ฐํ ์ฌ๋ณผ์ ํ์ฉํ์ง์๋๋ค. (์ค๋ณตํ strong symbol์ ์๋ฌ) ๋์ผํ ์ด๋ฆ์ ๊ฐํ ์ฌ๋ณผ๊ณผ ๋ค์์ ์ฝํ ์ฌ๋ณผ๋ค์ ๊ฐํ ์ฌ๋ณผ์ ํํ๋ค (strong symbol > weak symbol) ๋์ผํ ์ด๋ฆ์ ์ฌ๋ฌ๊ฐ์ ์ฌ๋ณผ์ ์ด๋ค ์ฝํ ์ฌ๋ณผ์ ํํด๋ ์๊ด์๋ค. (weak symbol ์ค์์ ์ง ๋ง) ์ด๊ธฐํํ๊ณ ์ด๊ธฐํ ํ์ง์์ ๊ฐ์ ์ด๋ฆ์ ์ ์ญ๋ณ์๊ฐ ๊ฐ๊ฐ ์๋ค๋๊ฐ ํ์
์ด ๋ค๋ฅธ ์ ์ญ ๋ณ์๊ฐ ์ด๋ฆ์ด ๊ฐ๋ค๋๊ฐ ๋ฑ์ ์ํฉ์ ์๋ํ์ง์์ ๋ฒ๊ทธ๋ฅผ ์์ฐฝ ๋ผ ์ ์๋ค. ์ ์ญ๋ณ์๋ ์ฌ์ฉํ๋ ค๋ฉด ์ต๋ํ static ์ ๋ฌ๊ณ ์ฌ์ฉํ๋๊ฒ ์ข๋ค. ์ธ๋ถ์์ ๊ฐ์ ธ๊ฐ์ ์ฌ์ฉ์์๋ ํด๋น ๋ณ์ ๋ ํผ๋ฐ์ค(or ํฌ์ธํฐ)๋ฅผ ๋ฐํํ๋ Getter ํจ์๋ฅผ ๋ง๋ค์ด์ ํธ์ถํ๋๊ฒ์ด ์ ์ ๊ฑด๊ฐ์ ์ด๋กญ๋ค. ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ ์
์ฅ์์๋ ์ปดํ์ผ๋ ๋ชฉ์ ํ์ผ ์งํฉ๋ง ํ์ํ๋ฉด ๋๋ค. ํ๋๋ ํ์ผ ๋ํ ์ฌ๋ฌ๊ฐ๋ฉด ๋ฒ๊ฑฐ๋ก์ฐ๋ ํตํฉ๋ ํ๊ฐ์ ํ์ผ๋ง ์์๋ผ๊ณ ์๊ฐํ๊ฒ ๋ฐ๋ก ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค. ์ต์ด์ ์ปดํ์ผ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ๋ง ๊ฐ์ง๊ณ , ๋งํน์์ ํฉ์น๊ธฐํด์ ์ต์ข
์คํํ์ผ์ ์คํํ์ผ์ ๋ชจ๋ ๊ฒ์ด ๋ค ๋ค์ด๊ฐ์๋ค. (์คํํ์ผ ์ฉ๋๋ ๊ทธ๋งํผ ์ฆ๊ฐ) ๊ทธ๋์ ๋ด์ฉ๋ฌผ์ ๋ฌถ์ด ํ๋์ object file๋ง๋ค๊ณ , ํค๋ํ์ผ์ ์ ๊ณต โ ์ฌ์ฉ์๋ ํค๋ ํ์ผ์ includeํ์ฌ ํจ์๋ฅผ ํธ์ถํ๊ณ ๋ง์ปค ๋จ๊ณ์์ ๋ฌถ์ object file์ ํตํด ์คํํ์ผ๋ก ๋ง๋๋ ๋ฐฉ์์ด๋ค. ๋ฆฌ๋
์ค์์๋ .a ์๋์ฐ์ฆ์์๋ .lib ํ์ฅ์๋ฅผ ์ฌ์ฉํ๋ค. ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ( Widows DLL ref ) static lib๋ ์คํ ํ์ผ์ ๋ง๋๋ ๊ณผ์ ์์ ๋ณด๋ฉด ๊ตฐ๋๋๊ธฐ ์์ด ๊น๋ํ ๋ฐฉ์์ด๋ค. ํ์ง๋ง, ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฉ์ ์ ๋ง ๋ง์ ์คํ ํ์ผ์์ ๋์์ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํด๋ณด์. ๊ทธ๋ฌ๋ฉด ๋ชจ๋ ์คํํ์ผ์ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋งํนํ์ฌ ๋ง๋ค ์๋์๋ค. ๊ทธ๋ฌ๋ฉด ํด๋น ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ จ๋ ๊ฒ์ด ๊ฐ๋ณ ํ๋ก์ธ์ค๋ง๋ค ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ ๋ ๊ฒ์ด๋ค. ๋ฉ๋ชจ๋ฆฌ ์ ์ฒด์ ์
์ฅ์์๋ณด๋ฉด ๋์ผํ ์ฝ๋ ๋ก์ง์ด ํ๋ก์ธ์ค ๋ณ ๋ฉ๋ชจ๋ฆฌ์ ๋ชจ๋ ์ฌ๋ผ๊ฐ ์๋ ์
์ด๋ค. ์ถ๊ฐ๋ก ์ฐธ์กฐํ๋ ๋ชจ๋ ์คํ ํ์ผ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ค. ์ด๊ฒ ๋นํจ์จ์ ์ด๋ผ ํ๋จํ์ฌ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ๋ฒ๋ง ์ ์ฌํ๊ณ ์ฌ๋ฌ ์คํํ์ผ์์ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐ๋งํ์ฌ ์ฌ์ฉํ ์ ์๋๋ก ๊ตฌ์กฐ๋ฅผ ์ก์๋ค. ๋ฆฌ๋
์ค์์๋ .so ํ์ผ ํ์ฅ์๋ก ์๋์ฐ์ฆ์์ ํํ๋งํ๋ DLL ํ์ฅ์ ํ์ผ์ด ์ฌ๊ธฐ์ ํด๋นํ๋ค. ์๋๋ฐฉ์์ ํฌ๊ฒ ๋๊ฐ์ง๋ก ๋๋๋ค. implicit load-time linking : Loader๊ฐ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฌํ๋ ๋์ DLL๋ ๊ฐ์ด ์ ์ฌ๋ฅผ ํ๋ค. ์ด๋ ์ด ์์
์ ํ๋ ์ฃผ์ฒด๋ฅผ Dynamic linker๋ผ ํ๋ค. DLL ์ ์ฒ์์ ์์ฑ์์ ๋๊ฐ์ง ํ์ผ์ด ๋ง๋ค์ด์ง๋ค dll, lib ํ์ผ dll์ด ์ค์ ๋๋ถ๋ถ์ mainํจ์์๋ ํ์ผ์ด๊ณ , ์ค์ ๋ก๋ฉ์์ ์ฌ์ฉ (dll ํ์ผ์ด ์ ๊ณตํ๋ ํจ์๋ .edata ์น์
์ ์กด์ฌํ๋ค ) lib ํ์ผ์ ๋งํน์์ ์ฌ์ฉ ์ฐธ์กฐ๋ฅผ ์๋ ค์ฃผ๋ ์ญํ ๋งํน์์ ์ฌ์ฉ ํจ์์ ๊ตฌํ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ ๋น์ฐํ ๋งํน์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ .lib ํ์ผ์ด ๋งํน์์ ํด๋น ํจ์์ ๊ตฌํ์ฒด๊ฐ DLL์ ์์์ ์ธ์งํ๋ค. (์ด์ ๋ํ ์ ๋ณด๋ . idata ์น์
์ ์กด์ฌํ๋ค ) ๊ทธ๋ฌ๊ณ ํ์ผ ์คํ์์ ๋ก๋๊ฐ ํด๋น DLLํ์ผ์ ์ค์ ๋ก ๋ก๋ํ๋ฉด์ ํจ์์ ์์น๋ฅผ ๊ฐ๋ฅดํค๊ฒํ๋ค.
์คํํ์๋ง์ dll ํ์ผ์ด ์์ผ๋ฉด ์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ๊ฑฐ๋ค. explicit run-time linking : ์์คํ์ผ์์ ์ง์ DLL open(dlopen, LoadLibrary) ํจ์๋ฅผ ํธ์ถํ์ฌ DLL์ ๋ก๋ฉํ๋ ๊ฒฝ์ฐ ํจ์ ํธ์ถ์ ํ์ฌ DLL์ ์์ฑ ์ฝ๋ ๋ก์ง์ ์ง์ ๋ก๋๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ก๋ํ DLL์์ ํน์ ํจ์๋ช
์ ๋ฐ๋ฅธ ์ง์ ํจ์ ์ฃผ์๋ฅผ ๋ถ๋ฌ์ ํจ์ํฌ์ธํฐ๋ก ์ ์ฅํ๊ณ ์ด ํจ์ํฌ์ธํฐ๋ฅผ ํธ์ถํ์ฌ ๊ฐ์ ์ฌ์ฉํ๋ค. ๋น์ฐํ ์ปดํ์ผ๋จ์์๋ ์ด๋ค DLL์ ๋ก๋ํ๋์ง, ์ด๋ค ํจ์๋ฅผ ์ฌ์ฉํ ์ง ์ปดํ์ผํ์์ ํ์
์ด ๋ถ๊ฐ๋ฅ ํ์ฌ ์คํํ์ผ์ ๋ณธ์ธ์ด DLL์ ์ฌ์ฉํ๋์ง ์กฐ์ฐจ ์ ์ ์๋ค. ๋ชจ๋ ์ต์ ์ธ์ด๋ค์ ์ฌ์ฉ ๋ฐฉ๋ฒ include๋ฐ์๋ ์ ๋ง ์๋ ์ธ์ด์๋ ํด๋น ๊ธฐ๋ฅ์ด๋ค. ์ต์ ์ธ์ด์๋ ๋ชจ๋ ๋ฐฉ์์ ์ฑํํ๊ณ ์๋ค. include๋ ๋ณด๋ฉด ์๊ฒ ์ง๋ง ํค๋ํ์ผ ์ ์ฒด ๋ฅผ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐํ๋ค. cpp ๊ฐ๋ณ ํ์ผ ๊ธฐ์ค์ผ๋ก ๋ณด๋ฉด ๋ชจ๋ ํค๋ ํ์ผ์ ์๋ ๋ชจ๋ ์ ๋ณด๊ฐ ํ์ํ ์ผ์ ๋ณดํต ์๋ค. ์ ํค๋ ํ์ผ์กฐ์ฐจ ์ชผ๊ฐ์ ํน์ ํจ์ ํ๋๋ง ๊ฐ์ ธ๋ค ์ฐ์๋ผ๋ ๋ฐฉ์์์ ์๊ฒจ๋ฌ๋ค. ์ ์ง์ ํ๋ฒ ํ์ธํด๋ณด์ 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
static int staticVar = 0x12345678 ; void func1 (); void func () { staticVar ++ ; } int global = 0x12abcdef ; const char * str = " Hello " ; int main () { staticVar ++ ; func1 (); } func1 ํ์ผ์ด ์์ด์ ๋น์ฐํ ๋ง์ปค์๋ฌ๊ฐ ๋ฐ์ ํ๋ค. ๊ทธ๋ผ objํ์ผ์ ์์ฑ ๋์ด์์ผ๋ ์ obj ํ์ผ์ ํ๋ฒ PEView ๋ก ์ด์ด๋ณด์ ๋ช
์ฌํ์ ํ์ผ์ ๊ฒฐ๊ตญ ๊ทธ๋ฅ ์ด์ง์ ๋ฉ์ด๋ฆฌ๋ค.
PEView๋ ๊ฒฐ๊ตญ์ ์ด์ง ๋ช
๋ น์ด๋ฅผ ๋ถ์ํด๋ดค์ผ๋ฉด ์๊ฒ ์ง๋ง
์ด์ง ๋ฉ์ด๋ฆฌ๋ฅผ ๊ท์น์๋ฐ๋ผ ๊ทธ๋ฅ ๋ช๋ฐ์ดํธ ์ฉ์ฝ๊ณ ํด์ ํด๋์ ๊ฒ์ ๋ถ๊ณผํ๋ค. ๊ท์น๋ง ์์ผ๋ฉด ์ฐ๋ฆฌ๋ PEView๋ฅผ ๋ง๋ค ์ ์๋ค drectve : ๋ง์ปค์ต์
์ด ๋ค์ด์๋ค data : ์ด๊ธฐํ๋ ์ ์ญ๋ณ์ ๋ฐ ์ ์ ๋ณ์์ ๊ฐ์ด ๋ค์ด์๋ค. global ๋ฐ staticVAr rdata ์ด๊ธฐํ๋ ์ฝ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ (์คํธ๋ง) ์ ์ด์ ์ด์
์ ๊น๋ณด์ ์ด์
์ PE View์์ ๋ชป๋ณด๋ ๋ฏํด์ ๋ค๋ฅธ ํด์ ์ฐพ์๋ดค์๋ ๊ณต์์ผ๋ก ์ ๊ณตํ๋ ๊ฒ ์ค์๋ Visual Studio msvc ๋ด์ฅ ํด์ธ dumpbin.exe ์ผ๋ก ์ง์ ๋ณผ ์๋ ์๋ค. ๊ณต์์ ์ผ๋ก ์ง์ํ๋ ํด์ธ ๋งํผ ๊ฐ์ฅ ์ ํํ๊ณ ํ์คํ๋ค๊ณ ๋ณผ ์ ์๋ค. visual studio ์ค์น ํด๋์์์ ํด๋น ํ์ผ๋ก ๊ฒ์ํ๋ฉด ๋์จ๋ค. ์ด ํด์ ํตํด์ obj text section์ Disasmํ ๊ฒฐ๊ณผ๋ ๋ณผ ์ ์๋ค 1
dumpbin . exe / all ๊ฒฝ๋ก / ํ์ผ . obj 1
dumpbin . exe / DISASM ๊ฒฝ๋ก / ํ์ผ . obj 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
Microsoft ( R ) COFF / PE Dumper Version 14.39 . 33522.0 Copyright ( C ) Microsoft Corporation . All rights reserved . Dump of file File Type : COFF OBJECT ? func @@ YAXXZ ( void __cdecl func ( void )): 0000000000000000 : 40 55 push rbp 0000000000000002 : 57 push rdi 0000000000000003 : 48 81 EC E8 00 00 sub rsp , 0 E8h 00 000000000000000 A : 48 8 D 6 C 24 20 lea rbp ,[ rsp + 20 h ] 000000000000000 F : 48 8 D 0 D 00 00 00 lea rcx ,[ __416313BE_testproject @ cpp ] 00 0000000000000016 : E8 00 00 00 00 call __CheckForDebuggerJustMyCode 000000000000001 B : 8 B 05 00 00 00 00 mov eax , dword ptr [? staticVar @@ 3HA ] 0000000000000021 : FF C0 inc eax 0000000000000023 : 89 05 00 00 00 00 mov dword ptr [? staticVar @@ 3HA ], eax 0000000000000029 : 48 8 D A5 C8 00 00 lea rsp ,[ rbp + 0 C8h ] 00 0000000000000030 : 5 F pop rdi 0000000000000031 : 5 D pop rbp 0000000000000032 : C3 ret __JustMyCode_Default : 0000000000000000 : C2 00 00 ret 0 main : 0000000000000000 : 40 55 push rbp 0000000000000002 : 57 push rdi 0000000000000003 : 48 81 EC E8 00 00 sub rsp , 0 E8h 00 000000000000000 A : 48 8 D 6 C 24 20 lea rbp ,[ rsp + 20 h ] 000000000000000 F : 48 8 D 0 D 00 00 00 lea rcx ,[ __416313BE_testproject @ cpp ] 00 0000000000000016 : E8 00 00 00 00 call __CheckForDebuggerJustMyCode 000000000000001 B : 8 B 05 00 00 00 00 mov eax , dword ptr [? staticVar @@ 3HA ] 0000000000000021 : FF C0 inc eax 0000000000000023 : 89 05 00 00 00 00 mov dword ptr [? staticVar @@ 3HA ], eax 0000000000000029 : E8 00 00 00 00 call ? func1 @@ YAXXZ 000000000000002 E : 33 C0 xor eax , eax 0000000000000030 : 48 8 D A5 C8 00 00 lea rsp ,[ rbp + 0 C8h ] 00 0000000000000037 : 5 F pop rdi 0000000000000038 : 5 D pop rbp 0000000000000039 : C3 ret Summary 98 . chks64 14 . data 34 C . debug$S 64 . debug$T 82 . drectve 1 . msvcjmc 18 . pdata 6 . rdata 8 . rtc$IMZ 8 . rtc$TMZ 70 . text$mn 20 . xdata ์ด์
์์ ์ค์ ๋ก ์ฐธ์กฐ๊ฐ ํ์ํ ๊ณณ์ ๋ชจ๋ 0์ผ๋ก ๋ฐ๋ ค์๋ค. ๊ทธ๋ผ ์ด๋ป๊ฒ disasemble๋ก ๋ณ์๋ฅผ ์ ํํ๊ฒ ์ง์ด๋์๊น? ํด๋น ์ ๋ณด๋ค์ ๊ฐ๋ณ๋ก COFF ์ฌ๋ฐฐ์น ํ
์ด๋ธ์ ์กด์ฌํ๋ค. 1
2
3
4
5
6
7
8
9
10
RELOCATIONS # A Symbol Symbol Offset Type Applied To Index Name -------- ---------------- ----------------- -------- ------ 00000012 REL32 00000000 15 __416313BE_testproject @ cpp 00000017 REL32 00000000 2 D __CheckForDebuggerJustMyCode 0000001 D REL32 00000000 41 ? staticVar @@ 3HA ( int staticVar ) 00000025 REL32 00000000 41 ? staticVar @@ 3HA ( int staticVar ) 0000002 A REL32 00000000 28 ? func1 @@ YAXXZ ( void __cdecl func1 ( void )) ์ต์ข
์ ์ธ ์ ์ฒด ํด๋น OBJ์ COFF SYMBOL TABLE ์ด๋ค 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
COFF SYMBOL TABLE 000 010582 F2 ABS notype Static | @ comp . id 001 80010390 ABS notype Static | @ feat . 00 002 00000002 ABS notype Static | @ vol . md 003 00000000 SECT1 notype Static | . drectve Section length 82 , # relocs 0 , # linenums 0 , checksum 0 Relocation CRC 00000000 006 00000000 SECT2 notype Static | . debug$S Section length 1 A0 , # relocs 8 , # linenums 0 , checksum 0 Relocation CRC 6 F82BF45 009 00000000 SECT3 notype Static | . data Section length 14 , # relocs 1 , # linenums 0 , checksum 9 BE618FC Relocation CRC D3D0C3E9 00 C 00000000 SECT3 notype External | ? global @@ 3HA ( int global ) 00 D 00000008 SECT3 notype External | ? str @@ 3PEBDEB ( char const * const str ) 00 E 00000000 SECT4 notype Static | . rdata Section length 6 , # relocs 0 , # linenums 0 , checksum 60817 DAB , selection 2 ( pick any ) Relocation CRC 00000000 011 00000000 SECT4 notype External | ?? _C @ _05COLMCDPH @ Hello @ ( `string')
012 00000000 SECT5 notype Static | .msvcjmc
Section length 1, #relocs 0, #linenums 0, checksum 77073096
Relocation CRC 00000000
015 00000000 SECT5 notype Static | __416313BE_testproject@cpp
016 00000000 SECT6 notype Static | .text$mn
Section length 33, #relocs 4, #linenums 0, checksum 8A2C0D07, selection 1 (pick no duplicates)
Relocation CRC 64879072
019 00000000 SECT7 notype Static | .debug$S
Section length 9C, #relocs 4, #linenums 0, checksum 0, selection 5 (pick associative Section 0x6)
Relocation CRC BD630DA2
01C 00000000 SECT8 notype Static | .text$mn
Section length 3, #relocs 0, #linenums 0, checksum 922B422E, selection 2 (pick any)
Relocation CRC 4A6A8444
01F 00000000 SECT9 notype Static | .debug$S
Section length 6C, #relocs 2, #linenums 0, checksum 0, selection 5 (pick associative Section 0x8)
Relocation CRC C5009019
022 00000000 SECTA notype Static | .text$mn
Section length 3A, #relocs 5, #linenums 0, checksum AAA72B5C, selection 1 (pick no duplicates)
Relocation CRC A65313CD
025 00000000 SECTB notype Static | .debug$S
Section length A4, #relocs 4, #linenums 0, checksum 0, selection 5 (pick associative Section 0xA)
Relocation CRC 16E24314
028 00000000 UNDEF notype () External | ?func1@@YAXXZ (void __cdecl func1(void))
029 00000000 SECT6 notype () External | ?func@@YAXXZ (void __cdecl func(void))
02A 00000000 SECTA notype () External | main
02B 00000000 UNDEF notype () External | _RTC_InitBase
02C 00000000 UNDEF notype () External | _RTC_Shutdown
02D 00000000 UNDEF notype () External | __CheckForDebuggerJustMyCode
02E 00000000 SECT8 notype () External | __JustMyCode_Default
02F 00000000 SECT6 notype Label | $LN3
030 00000000 SECTA notype Label | $LN3
031 00000000 SECTC notype Static | .xdata
Section length 10, #relocs 0, #linenums 0, checksum E3EC660A, selection 5 (pick associative Section 0x6)
Relocation CRC 00000000
034 00000000 SECTC notype Static | $unwind$?func@@YAXXZ
035 00000000 SECTD notype Static | .pdata
Section length C, #relocs 3, #linenums 0, checksum B42549E, selection 5 (pick associative Section 0x6)
Relocation CRC 51E35C8D
038 00000000 SECTD notype Static | $pdata$?func@@YAXXZ
039 00000000 SECTE notype Static | .xdata
Section length 10, #relocs 0, #linenums 0, checksum E3EC660A, selection 5 (pick associative Section 0xA)
Relocation CRC 00000000
03C 00000000 SECTE notype Static | $unwind$main
03D 00000000 SECTF notype Static | .pdata
Section length C, #relocs 3, #linenums 0, checksum 140D4FB5, selection 5 (pick associative Section 0xA)
Relocation CRC 70AAD6AF
040 00000000 SECTF notype Static | $pdata$main
041 00000010 SECT3 notype Static | ?staticVar@@3HA (int staticVar)
042 00000000 SECT10 notype Static | .rtc$IMZ
Section length 8, #relocs 1, #linenums 0, checksum 0, selection 2 (pick any)
Relocation CRC BB70974B
045 00000000 SECT10 notype Static | _RTC_InitBase.rtc$IMZ
046 00000000 SECT11 notype Static | .rtc$TMZ
Section length 8, #relocs 1, #linenums 0, checksum 0, selection 2 (pick any)
Relocation CRC AACEFC19
049 00000000 SECT11 notype Static | _RTC_Shutdown.rtc$TMZ
04A 00000000 SECT12 notype Static | .debug$T
Section length 64, #relocs 0, #linenums 0, checksum 0
Relocation CRC 00000000
04D 00000000 SECT13 notype Static | .chks64
Section length 98, #relocs 0, #linenums 0, checksum 0
Relocation CRC 00000000
์ค๊ฐ์ Static, External, Label ๋ ์ค๋ช
์ด ์์ด๋ ๊ฐ๊ฐ ์ด๋ค ์๋ฏธ์ธ์ง ์ ์ ์์๊ฑฐ๋ผ ์๊ฐํ๋ค ๋งํฌ์๋ฌ๋ฅผ ๋ฑ์ func1 ์ ์ง์ฐ๊ณ ์ปดํ์ผ์ ํ์๋ ์ต์ข
์ปดํ์ผ ๋ ์ฝ๋์ main ํจ์ disasm ์ด๋ค 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
main : 00000001400117 C0 : 40 55 push rbp 00000001400117 C2 : 57 push rdi 00000001400117 C3 : 48 81 EC E8 00 00 sub rsp , 0 E8h 00 00000001400117 CA : 48 8 D 6 C 24 20 lea rbp ,[ rsp + 20 h ] 00000001400117 CF : 48 8 D 0 D 2 A F8 00 lea rcx ,[ 140021000 h ] 00 00000001400117 D6 : E8 7 C FB FF FF call @ ILT + 850 ( __CheckForDebuggerJustMyCode ) 00000001400117 DB : 8 B 05 2 F A8 00 00 mov eax , dword ptr [ 14001 C010h ] 00000001400117 E1 : FF C0 inc eax 00000001400117 E3 : 89 05 27 A8 00 00 mov dword ptr [ 14001 C010h ], eax 00000001400117 E9 : 33 C0 xor eax , eax 00000001400117 EB : 48 8 D A5 C8 00 00 lea rsp ,[ rbp + 0 C8h ] 00 00000001400117 F2 : 5 F pop rdi 00000001400117 F3 : 5 D pop rbp 00000001400117 F4 : C3 ret ์ฐธ์กฐ๊ฐ ํ์ํ ๋ณ์๋ค์ ์ฃผ์๋ฅผ ์ ๋ ์ฐธ์กฐํ์ฌ ์ฌ๋ฐฐ์นํ์๋ค. notepad์ import ํ์ผ์ ํ๋ฒ ๋ณด์. 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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
dumpbin / imports C : \ Windows \ System32 \ notepad . exe Microsoft ( R ) COFF / PE Dumper Version 14.39 . 33522.0 Copyright ( C ) Microsoft Corporation . All rights reserved . Dump of file C : \ Windows \ System32 \ notepad . exe File Type : EXECUTABLE IMAGE Section contains the following imports : KERNEL32 . dll 1400268 B8 Import Address Table 14002 D3E0 Import Name Table 0 time date stamp 0 Index of first forwarder reference 2 B8 GetProcAddress DC CreateMutexExW 1 AcquireSRWLockShared 114 DeleteCriticalSection GDI32 . dll 140026800 Import Address Table 14002 D328 Import Name Table 0 time date stamp 0 Index of first forwarder reference USER32 . dll 140026 B50 Import Address Table 14002 D678 Import Name Table 0 time date stamp 0 Index of first forwarder reference api - ms - win - crt - string - l1 - 1 - 0 . dll 140027088 Import Address Table 14002 DBB0 Import Name Table 0 time date stamp 0 Index of first forwarder reference 83 memset A9 wcsnlen 9 E wcscmp api - ms - win - crt - runtime - l1 - 1 - 0 . dll 140027060 Import Address Table 14002 DB88 Import Name Table 0 time date stamp 0 Index of first forwarder reference 15 _c_exit 3 D _register_thread_local_exe_atexit_callback 37 _initterm_e 36 _initterm api - ms - win - crt - private - l1 - 1 - 0 . dll 140026 F40 Import Address Table 14002 DA68 Import Name Table 0 time date stamp 0 Index of first forwarder reference 91 _o__callnewh 93 _o__cexit 9 F _o__configthreadlocale api - ms - win - core - com - l1 - 1 - 0 . dll 140026 D80 Import Address Table 14002 D8A8 Import Name Table 0 time date stamp 0 Index of first forwarder reference 49 CoWaitForMultipleHandles 46 CoUninitialize api - ms - win - core - shlwapi - legacy - l1 - 1 - 0 . dll 140026 E68 Import Address Table 14002 D990 Import Name Table 0 time date stamp 0 Index of first forwarder reference .... Summary 3000 . data 1000 . didat 2000 . pdata A000 . rdata 1000 . reloc 1000 . rsrc 25000 . text ๋์ถฉ ์ด๋ฐ๋๋์ด๋ค. |
| Markdown | [](https://eeeuns.github.io/)
# [eeeuns](https://eeeuns.github.io/)
EUnSโs blog
[Recent](https://eeeuns.github.io/) [Date](https://eeeuns.github.io/archive) [Tag](https://eeeuns.github.io/tags) [About](https://eeeuns.github.io/about)
# [C์ธ์ด๊ฐ cpu์ ์๋ํ๊ธฐ๊น์ง ์ฌํ : ์ปดํ์ผ](https://eeeuns.github.io/2024/08/09/understandingcomputercompileo/)
- [๊ธฐ๋ณธ๊ธ](https://eeeuns.github.io/2021/10/27/understandingcomputer/)
๊ธฐ๋ณธ๊ธ์ ์ฐ๊ณ ๋ด๊ฐ ์๋ ๋ชจ๋ ๊ฑธ ์ฐ๊ฒ ๋ค๋ ์๊ฐ์ ์๋ ๋ถํฐ ํด์๋ค. ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์ฑ์ ์ด๋ ๊ฒ ๋๊ฐ์ง๋ก ํ๋ ค๊ณ ํ๋๋ฐ..
1. ์ปดํ์ผ ๊ณผ์
2. ์ค์ ์คํ ๊ณผ์
๋ง์ปค๊ธ์ด ๊ต์ฅํ ๊ด์ฐฎ์ ๊ธ์ด ์์ด์ ๋งํฌ๋ก๋ง ๋ฌ๊ณ ํ์น๊ณ ์๋ค๊ฐ, ์ด๋ฒ์ ์ด๋ค ๊ณ๊ธฐ๋ก ์ปดํ์ผ ๊ณผ์ ์ ์ฐ๊ณ ์๋ค ๋ด์ฉ์ด ๋๋ฌด ๋ง์์ง๊ณ ์ปดํ์ผ ๊ธ์ ๋ค ์์ฑํ๊ณ ์ฌ๋ฆฌ๋ ค๋ ์ธ์ ์์ฑ๋ ์ง ๊ฐ๋ ์์กํ๊ธฐ์ ์ง๋ฅผ์์ ์ ์ ๋ฐ๋ถ๋ฅผ ์ฌ๋ฆฐ๋ค..(์์ ํ์น ๊ธ์ ๋ ๋ ธ๋ค) ๊ทธ๋ฆฌ๊ณ ๋จ์ ๋ด์ฉ๋ค์ด C์ธ์ด๊ฐ cpu์ ์๋ํ๊ธฐ๊น์ง๋ผ๋ ์ฃผ์ ์ ์ข ๋ฒ์ด๋ ์๊ธฐ๋ค์ด๋ผ ๋ณ๊ฐ์ [posting](https://eeeuns.github.io/2024/09/03/reducebuild/)์ผ๋ก ์ฌ๋ฆฌ๋ ค๊ณ ํ๋ค.
์ด๋ฒ ๋ด์ฉ์ ๋๋ถ๋ถ CSAPP ๋ง์ปค ์ฅ์ ํด๋นํ๋ ๋ด์ฉ๋ค์ด๋ค.
***
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์ ์ฒด ์ด๋ฏธ์ง

์ ๊ณผ์ ์ ์ฒด๋ฅผ ํด์ฃผ๋ ์ฃผ์ฒด๋ฅผ ์ปดํ์ผ๋ฌ๋ผ๊ณ ํ๋ค. (hello.c๋ฅผ ์ปดํ์ผํ์ฌ hello๋ฅผ ๋ฑ์ด์ฃผ๋ ์ฃผ์ฒด)
ํ์ฌ ๋ง์ด ์ฌ์ฉํ๋ ์ปดํ์ผ๋ฌ๋ ๋ํ์ ์ผ๋ก ์ธ ๊ฐ ์ ๋๊ฐ ์๋ค.
- MSVC (Microsoft Visual Complier) : windows Visual studio ide๋ฅผ ์ฌ์ฉํ ๋ ์ฃผ๋ก ์ฌ์ฉ
- Clang
- GCC
์์ ์ฌ์ง์์ ๋ณดํต ๊ฐ์ฅ ํฌ๊ฒ ๋ ๋จ๊ณ๋ฅผ ๊ฑฐ์น๋ค
์ปดํ์ผ์ ์ํฉ์๋ฐ๋ผ์ ๋๊ฑฐ๋ ์ข์ ์๋ฏธ๋ก ์ธ ์ ์๋๋ฐ ์๋๋ก ๊ฐ์๋ก ์ข์ ์๋ฏธ์ด๋ค.
1. ์ฝ๋๋ฅผ ์ปดํ์ผํ์ฌ ์คํํ์ผ์ ๋ฑ๋ ์ ์ฒด ๊ณผ์ ์ ํธ์นญํ๋ค. ์ ์ด๋ฏธ์ง ์ ์ฒด ๊ณผ์
2. ๋งจ ๋ง์ง๋ง ๋ง์ปค๋จ๊ณ๋ฅผ ์ ์ธํ๊ณ ๊ตฌ๋ถํ์ฌ ์ปดํ์ผ, ๋ง์ปค๋ก ๊ตฌ๋ถํ์ฌ ํธ์นญํ๊ธฐ๋ํ๋ค.
3. ๋ ์ธ๋ถ์ ์ผ๋ก ๋งคํฌ๋ก ์์
์ด ๋๋ํ ์ด์
ํ์ผ๋ก ๋ฑ๋ ๊ณผ์ ์ ์ปดํ์ผ์ด๋ผ๊ณ ๋ ํ๋ค.
๊ธ์์๋ 1, 2์ ์๋ฏธ๋ฅผ ํผ์ฉํ์ฌ ์ฌ์ฉํ ๊ฒ์ด๋ค.
๊ฐ๋จํ๊ฒ ๋ง์ปค๋ฅผ ์ ์ธํ ์ปดํ์ผ ์ ์ฒด ๊ณผ์ ์ ํ๋ฒ ํ๊ณ ๋์ด๊ฐ์.
# Compile
## Preprocessor
1. **๋งคํฌ๋ก ๋ช
๋ น์ด๋ฅผ ์ฒ๋ฆฌํ๋ค**
2. ์ฌ๊ธฐ์ ๋์จ ๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ์ง๊ณ **์ค์ ๋ก ์ปดํ์ผํ๋ ํ์ผ** ๊ทธ ์์ฒด๋ผ๊ณ ์๊ฐํ๋ฉด ์ข๋ค. ์ง์ง ์ ์ฒ๋ฆฌ๋ค.
\#define symbol ์ซ์ ์ด๋ฐ๊ฑฐ๋ ์ค์ symbol์ ์ซ์๋ก ๋ณ๊ฒฝ๋์, ์ฝ๋์์ ์ ๋ณด๋ก ๋จ์ง์๊ธฐ์ ๋๋ฒ๊น
์์ ์ฐธ๊ณ ๊ฐ ์์ ์๋๋ ๋ฌธ์ ๊ฐ ์๋ค.
ifdef ๋ก ๊ฑธ๋ฌ์ง define์ด๋ ์ฝ๋๋ค์ ์ค์ ๋ก **์คํํ์ผ์ ์๋ ์ฝ๋**๊ฐ ๋๋ค.
๋งค์ฐ ์ค์ํ ์ ๋ณด, ๋ก์ง์ด๋ผ์ ๋ฐฐํฌ ์คํํ์ผ์ ๋ค์ด๊ฐ๋๊ฒ์์ฒด๊ฐ ๋ฌธ์ ๊ฐ ๋๋ ์ผ์ด์ค๋ ์์ ํด๋น ๋จ๊ณ์์ ์ ์ธ๋ฅผ ์์ผ์, ์์ ๋ฐฐํฌํ์ผ์์ ์ ์ธ๋ฅผ ์์ผ๋ฒ๋ฆด ์ ์๋ค.
**\#include๋ ์ง์ง๋ก ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐ๋ค.** ํค๋๋ ๊ด์ฉ์ ๋ถ์ง .h๋ ํ์ฅ์๊ฐ ์๋์ด๋๋๋ค.
๊ฐ ๋จ๊ณ๋ฅผ ์ ํํ ์ดํดํ๋ค๋ฉด cpp ํ์ผ์ includeํด๋ ์ ์๋ํด์ผํ๋ค.
์์ Cpp ํ๋ก์ ํธ๋ฅผ ์ปดํ์ผํ๋ค๊ณ ์๊ฐํด๋ณด์.
  
์ธ cppํ์ผ๊ณผ ์ฐ์ธก์ stdafx.hํ์ผ์ include ์ํ์ด๋ค.
์ค์ ์ ์ฒ๋ฆฌ๋ฅผ ํตํ ํ์ผ ํฌ๊ธฐ๋ ์๋์ ๊ฐ๋ค.

๋ด๊ฐ ์์ฑ์ 30์ค์ ํ๋๋ผ๋ ์ฌ๊ธฐ์ includeํ๋ ํค๋ํ์ผ์ด 2๋ง ์ค ์ ๋ ๋๋ฉด ์ค์ ๋ก๋ 2๋ง 30์ค์ง๋ฆฌ Cppํ์ผ์ ์ปดํ์ผ ํ๋ ์ํฉ์ด ๋๋ค.
## Compiler
์ค์ ๋ก ์ด์
๋ธ๋ฆฌ์ด๋ก ๋ณํํ๋ ๊ณผ์
์คํ ์ฝ๋๋ฅผ ์ด์
๋ธ๋ฆฌ์ด๋ก ๋ณํํ๊ณ , ์ฌ๋ณผ๋ค์๋ํด์ ํ
์ด๋ธ์ ๋ง๋ ๋ค.
๊ฒฐ๊ณผ๋ฌผ์ ์ด์
๋ธ๋ฆฌ์ด๋ค.
ํด๋น ๊ฒฐ๊ณผ๋ฌผ์ด ์ฐ๋ฆฌ๊ฐ ๋ง์ง๋ง์ผ๋ก ๊ทธ๋๋ง ์ฝ์ ์ ์๋ ํ์ผ ์ค ๊ฐ์ฅ ๊ธฐ๊ณ์ด์ ๊ฐ๊น๋ค.
์์ธํ๋ ๋ณดํต ์ปดํ์ผ๋ฌ ์์
์์ ๋ค๋ฃจ๋ ๊ตฌ๋ฌธ ๋ถ์์ด ์ฃผ์ ํต์ฌ์ผ๋ก ์์ฉํ๋ค.
์ด ๋ค์๋ถํฐ ๊ฒฐ๊ณผ๋ฌผ์ ์ด์ง ํ์ผ์ด๋ค.
## Assembler
์ด์
๋ธ๋ฆฌ์ด๋ฅผ ์ด์ง ํ์ผ๋ก ๋ณํํ๋ค. ์ฌ๊ธฐ์๋ถํฐ๋ ๊ฐ๋จํ ํ์ผ์ ์คํํ์ผ์ด ๋ ์๋ ์๋ค.
์ด ๊ฒฐ๊ณผ๋ฌผ์ object ํ์ผ์ด๋ผ๊ณ ํ๋ค.
์ปดํ์ผ๋ฌ๋ ๋จ์ผ Cpp ํ์ผ์ ํ๋ฒ์ฉ ์ปดํ์ผํ์ฌ objectํ์ผ์ ๋ฝ์๋ด๊ณ N๊ฐ์ cppํ์ผ์ ๋ํด์ N๊ฐ์ objectํ์ผ์ ๋ฝ์๋ด๊ณ N๊ฐ์ objectํ์ผ์ ๋งํนํ์ฌ 1๊ฐ์ ์จ์ ํ ์คํํ์ผ์ ๋ฝ์๋ด๋ ๊ณผ์ ์ด๋ค.
์ ์ฌ๊ธฐ๊น์ง ์๋ก ์ด ๋๋ฌ๋ค.
# ์ปดํ์ผ์ ๊ฒฐ๊ณผ : Object File
object ํ์ผ์ ํฌ๊ฒ ์ธ๊ฐ์ง ์ข
๋ฅ๊ฐ ์๋ค.
1. reloacatable object file ์ฌ๋ฐฐ์น ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ
ํ์๊ฐ ์์ด์ ์คํํ์ผ์ด ๋ชป ๋ ํ์ผ์ด๋ค.
a.cpp์ ์ปดํ์ผํ๋๋ฐ a.cpp ์์ ํธ์ถํ ํจ์ func() ๊ฐ b.cpp ํ์ผ์ ๊ตฌํ๋์ด ์๋ ๊ฒฝ์ฐ ํด๋น ํจ์์ ์ปดํ์ผ ํ ์ ์์ผ๋ ์คํํ์ผ์ด ๋ ์ ์๋ ์ํฉ์ด๋ค.
์ด๋ฐ ๋ชฉ์ ํ์ผ์ ๋ชจ์์ ๋งํน์ ํ๋ฉด ์คํ ํ์ผ์ด ๋ ์ ์๋ค.
๋ฆฌ๋
์ค gcc์์ ๋ณดํต .o ํ์ฅ์์ ์ฌ์ฉํ๊ณ windows msvc ์์๋ .obj ํ์ผ ํ์ฅ์์ด๋ค.
2. excuteable object file ์คํ ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ
์คํ ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ์ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ต์ข
๊ฒฐ๊ณผ์ธ ์คํํ์ผ์ด๋ค. windows์์๋ .exe ํ์ฅ์, linux์์๋ .out ํ์ฅ์(๊ผญ ๊ทธ๋ ์ง ์๋ค)์ด๋ค.
์คํ ํ์ผ์ ์ค์ ๋ก ์คํํ๋ ๊ฒ์ ์ด์์ฒด์ ์ ๋ด๋น์ธ์ง๋ผ ํ์ผ ํ์์ ์ด์์ฒด์ ๊ฐ ์ ํ ํ์์ ์ข
์๋๋ค. windows์ ์คํ ํ์ผ์ linux์์ ์คํ ๋ถ๊ฐ๋ฅํ๋ค.
Linking๋จ๊ณ๊น์ง ๊ณ ๋ คํ์ฌ object ํ์ผ ํฌ๋งท์ด OS์ ์ข
์๋๋๋ฐ linux์์ ๋ชฉ์ ํ์ผ ํฌ๋งท์ ELF(Executable and Linkable Format**)** ํฌ๋งท์ด ๋ผํ๊ณ Windows ์์๋ PE Format(Portable Exceuteable)์ด๋ผ ํ๋ค.
3. Shared object file ๊ณต์ ๋ชฉ์ ํ์ผ
๋ด๊ฐ ์์ฑํ ์ฝ๋๊ฐ ๋์ ํ๋ก์ ํธ ๋ง์ด ์๋ ์์ ํ์ธ์๊ฒ๋ ์ฝ๋๋ฅผ ๊ณต์ ํ๊ธฐ์ํด์
์์ฑํ Cppํ์ผ์ ๋ชจ๋ ๋ฐ์์ ์ปดํ์ผ๊น์ง ๋ง์ถฐ์ ์ธํ
ํ๋๊ฒ์ ๋นํจ์จ์ ์ด๋ค.
์ฌ์ค์ ๋ณ๊ฒฝ๋์ง์๋ ์ฝ๋๋ฅผ ์ปดํ์ผํ๋๊ฒ์กฐ์ฐจ ๋นํจ์จ์ ์ด๋ค.
๋ฌถ์ธ ํ์ผ์ ํ๋๋ง ์ ๋ฌ๋ฐ์์ ์ฌ์ฉํ๋ฉด ๋์ง์์๊น ํ๋ ์์ด๋์ด์์ ์ถ๋ฐ
๋ค์์ ๋ ์์ธํ๊ฒ ์ค๋ช
# Object File ์์ธ
์ค์ PE File ๊ณต์ ๋ฌธ์ : <https://learn.microsoft.com/ko-kr/windows/win32/debug/pe-format?redirectedfrom=MSDN>
๋ณธ Windows ์์ ์คํํ์ผ์ ์ด๋ฏธ์ง/PE(์ด์ ๊ฐ๋ฅํ ์คํ ํ์ผ) ํ์ผ, ์ฌ๋ฐฐ์น ๊ฐ๋ฅ ๋ชฉ์ ํ์ผ์ ๊ฐ์ฒด /COFF(๊ณต์ฉ ๊ฐ์ฒด ํ์ผ ํ์) ํ์ผ ์ด๋ผ๊ณ ํ๋ค.
์์ธํ๊ฒ๋ ๋ช
์นญ ๋ฑ ์ฐจ์ด๊ฐ ์์ง๋ง ์ ์ฒด์ ์ธ ์น์
๊ฐ์๋ ELF์ ๋น์ทํ ๊ตฌ์กฐ์ด๋ค.

ELF ์ฌ๋ฐฐ์น ํ์ผ ๊ตฌ์กฐ

๊ฐ ๊ตฌ์ญ ๋ณ๋ก Section์ด ๋๋๋ค.
๋ชฉ์ ํ์ผ ์ ์ฒด์์ ๊ฐ์ฅ ๊ธฐ๋ณธ์ด ๋๋ ๋ค๊ฐ์ง
- .bss : ์ด๊ธฐํ๋์ง ์์ ์ ์ญ๋ณ์์ ์ ์ ๋ณ์
- .data : ์ด๊ธฐํ๋ ์ ์ญ๋ณ์ ๋ฐ ์ ์ ๋ณ์
- .rdata : ์ด๊ธฐํ๋ ์ฝ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ (์คํธ๋ง), ์ค์์น ์ผ์ด์ค ์ ํ ํ
์ด๋ธ
- .text : ๋ช
๋ น์ด ๋จธ์ ์ฝ๋
ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์์์ ์ต์ํ ์ ๋ด์ฉ์ ํด๋น ํ๋ section์ด๋ค.

- .debug ์น์
- **๋๋ฒ๊ทธ ๋๋ ํฐ๋ฆฌ**
- **.debug\$F(๊ฐ์ฒด๋ง ํด๋น)**
- **.debug\$S(๊ฐ์ฒด๋ง ํด๋น)** ์ด ์น์
์๋ Visual C++ ๋๋ฒ๊ทธ ์ ๋ณด(์ฌ๋ณผ ์ ๋ณด)๊ฐ ํฌํจ
- **.debug\$P(๊ฐ์ฒด๋ง ํด๋น)** ์ด ์น์
์๋ Visual C++ ๋๋ฒ๊ทธ ์ ๋ณด(๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ์ ๋ณด)๊ฐ ํฌํจ. ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ ํค๋๋ฅผ ํตํด ์ปดํ์ผ๋ ๋ชจ๋ ๊ฐ์ฒด ๊ฐ์ ๊ณต์ ๋๋ ํ์
- **.debug\$T(๊ฐ์ฒด๋ง ํด๋น)** ์ด ์น์
์๋ Visual C++ ๋๋ฒ๊ทธ ์ ๋ณด(ํ์ ์ ๋ณด)๊ฐ ํฌํจ
## **Microsoft ๋๋ฒ๊ทธ ์ ๋ณด์ ๋ํ ๋ง์ปค ์ง์**
๋๋ฒ๊ทธ ์ ๋ณด๋ฅผ ์ง์ํ๊ธฐ ์ํด ๋ง์ปค์์ ๋ค์์ ์ํํฉ๋๋ค.
- **.debug\$F**, **debug\$S**, **.debug\$P** ๋ฐ **.debug\$T** ์น์
์์ ๋ชจ๋ ๊ด๋ จ ๋๋ฒ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์์งํฉ๋๋ค.
- ๋ง์ปค์์ ์์ฑํ ๋๋ฒ๊น
์ ๋ณด์ ํจ๊ป ํด๋น ๋ฐ์ดํฐ๋ฅผ PDB ํ์ผ๋ก ์ฒ๋ฆฌํ๊ณ , ์ด๋ฅผ ์ฐธ์กฐํ๋ ๋๋ฒ๊ทธ ๋๋ ํฐ๋ฆฌ ํญ๋ชฉ์ ๋ง๋ญ๋๋ค.
- .**edata** : (์ด๋ฏธ์ง๋ง ํด๋น) : ๋ด๋ณด๋ด๊ธฐ ๋ฐ์ดํฐ ์น์
. ๋ค๋ฅธ ์ด๋ฏธ์ง์์ ๋์ ๋งํฌ๋ฅผ ํตํด ์ก์ธ์คํ ์ ์๋ ์ฌ๋ณผ์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ
- .reloc ์น์
(์ด๋ฏธ์ง๋ง ํด๋น) : ์ด๋ฏธ์ง์ ๋ชจ๋ ๋ฒ ์ด์ค ์ฌ๋ฐฐ์น์ ๋ํ ํญ๋ชฉ์ด ํฌํจ
- **.drectve**(๊ฐ์ฒด๋ง ํด๋น) **:** IMAGE\_SCN\_LNK\_INFO ์ธํ
๋์ด์์ด์ผํจ *\*\**๋ง์ปค ์ต์
- **.idata** ์น์
: ์ฌ๋ณผ ๊ฐ์ ธ์ค๊ธฐ ์ ๋ณด
- .pdata ์น์
: ์์ธ ์ฒ๋ฆฌ์ ์ฌ์ฉ๋๋ ํจ์ ํ
์ด๋ธ ํญ๋ชฉ์ ๋ฐฐ์ด
- .tls ์น์
: ์ค๋ ๋ ๋ก์ปฌ ์คํ ๋ฆฌ์ง ํ
์ด๋ธ ์ฃผ์ ๋ฐ ํฌ๊ธฐ
- .rsrc ์น์
: ๋ฆฌ์์ค ๋ฐ์ดํฐ (GUI ํ๋ก๊ทธ๋จ์์ ๋ง์ด ๋ณผ ์ ์๋ ์น์
, ๊ทธ๋ํฝ ์ ๋ณด ์ ์ฅ)
- .sxdata ์น์
- .cormeta ์น์
(๊ฐ์ฒด๋ง ํด๋น)
๋ํ ๊ฐ์ฒด ํ์ผ์ ๊ฐ ์น์
๋ง๋ค **COFF ์ฌ๋ฐฐ์น(๊ฐ์ฒด๋ง ํด๋น)**์ ๊ฐ์ง๊ณ ์๋ค. ์ฃผ์ ์ง์ ์ด ํ์ํ ์ฌ๋ณผ์๋์ค์ ํด๋น ์ฌ๋ณผ์ ์ฃผ์๋ฅผ ์จ๋ฃ๊ธฐ ์ํ ์ฃผ์๋ฅผ ๊ธฐ์
ํ๊ธฐ ์ํ offset์ ๊ธฐ๋กํ๋ ํ
์ด๋ธ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์ผ ๋ง์ง๋ง์ COFF ์ฌ๋ณผ ํ
์ด๋ธ์ด ์กด์ฌํ๋ค
# Linker
์ฌ๋ฌ๊ฐ์ ์ค๋ธ์ ํธ ํ์ผ์ ํ๋์ ์คํ๊ฐ๋ฅํ ์ค๋ธ์ ํธ ํ์ผ๋ก ํฉ์ณ๋ฒ๋ฆฐ๋ค.
๋ง์ปค๋ ๋๋จ๊ณ๋ก ์งํ๋๋ค.
1. Symbol resolution ์ฌ๋ณผ ํด์ ๊ฐ ์ฌ๋ฐฐ์น ๋ชฉ์ ํ์ผ์ ์ฌ๋ณผํ
์ด๋ธ์ ํฉ์ณ์ ์์ ํ ํ๋์ ์ฌ๋ณผ ํ
์ด๋ธ ์ํธ๋ฆฌ๋ฅผ ๊ฐ์ง๋ค.
2. Relocation ์ฌ๋ฐฐ์น : ์๋จ๊ณ์ ์ฌ๋ณผ ํ
์ด๋ธ ์ํธ๋ฆฌ๋ฅผ ํตํด์ ์ค์ ๋ก ์ฌ๋ณผ์ ์ฃผ์๋ฅผ ํ ๋นํ๋ค.
1. ์น์
๊ณผ ์ฌ๋ณผ ์ ์๋ฅผ ์ฌ๋ฐฐ์น : ๊ฐ ํ์ผ๋ง๋ค ๊ฒน์น๋ ์น์
์ ํ๋์ ๋จ์ผํ๋ ์น์
์ผ๋ก ํฉ์น๋ค.
2. ์น์
๋ด ์ฌ๋ณผ ์ฐธ์กฐ๋ฅผ ์ฌ๋ฐฐ์น : ๋ชจ๋ ์ฌ๋ณผ ์ฐธ์กฐ๋ฅผ ์์ ํ์ฌ ์ ํํ ์ฃผ์๋ฅผ ๊ฐ๋ฅดํค๋๋ก ์์
๋๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
- PC ์๋ ์ฐธ์กฐ์ ์ฌ๋ฐฐ์น : PC (Program Counter)์ ๊ธฐ์ค์ผ๋ก ๊ธฐ๋กํ๋ ๋ฐฉ์
- ์ ๋ ์ฐธ์กฐ์ ์ฌ๋ฐฐ์น : ์ ๋์ ์ธ ๋ณ์, ํจ์์ ์ฃผ์๊ฐ์ ์ง์ ๋ฐ์ ๊ธฐ๋กํ๋ ๋ฐฉ์
# Symbol resolution ์ ์ค๋ณต ์ ์๋ ์ฌ๋ณผ ์ฒ๋ฆฌ
์ด ์ฒ๋ฆฌ๋ฅผ ์ํด์ ๋ฆฌ๋
์ค์์๋ ๊ฐํ์ฌ๋ณผ๊ณผ ์ฝํ ์ฌ๋ณผ์ด๋ผ๋ ๊ฐ๋
์ด ๋ฑ์ฅํ๋ค.
1. strong symbol ๊ฐํ ์ฌ๋ณผ : ์ด๊ธฐํ๋ ์ ์ญ๋ณ์
2. weak symbol ์ฝํ ์ฌ๋ณผ : ์ด๊ธฐํ๋์ง์์ ์ ์ญ๋ณ์
๊ท์น
1. ๋์ผํ ์ด๋ฆ์ ๊ฐ๋ ๋ณต์์ ๊ฐํ ์ฌ๋ณผ์ ํ์ฉํ์ง์๋๋ค. (์ค๋ณตํ strong symbol์ ์๋ฌ)
2. ๋์ผํ ์ด๋ฆ์ ๊ฐํ ์ฌ๋ณผ๊ณผ ๋ค์์ ์ฝํ ์ฌ๋ณผ๋ค์ ๊ฐํ ์ฌ๋ณผ์ ํํ๋ค (strong symbol \> weak symbol)
3. ๋์ผํ ์ด๋ฆ์ ์ฌ๋ฌ๊ฐ์ ์ฌ๋ณผ์ ์ด๋ค ์ฝํ ์ฌ๋ณผ์ ํํด๋ ์๊ด์๋ค. (weak symbol ์ค์์ ์ง ๋ง)
์ด๊ธฐํํ๊ณ ์ด๊ธฐํ ํ์ง์์ ๊ฐ์ ์ด๋ฆ์ ์ ์ญ๋ณ์๊ฐ ๊ฐ๊ฐ ์๋ค๋๊ฐ ํ์
์ด ๋ค๋ฅธ ์ ์ญ ๋ณ์๊ฐ ์ด๋ฆ์ด ๊ฐ๋ค๋๊ฐ ๋ฑ์ ์ํฉ์ ์๋ํ์ง์์ ๋ฒ๊ทธ๋ฅผ ์์ฐฝ ๋ผ ์ ์๋ค.
์ ์ญ๋ณ์๋ ์ฌ์ฉํ๋ ค๋ฉด ์ต๋ํ static ์ ๋ฌ๊ณ ์ฌ์ฉํ๋๊ฒ ์ข๋ค.
์ธ๋ถ์์ ๊ฐ์ ธ๊ฐ์ ์ฌ์ฉ์์๋ ํด๋น ๋ณ์ ๋ ํผ๋ฐ์ค(or ํฌ์ธํฐ)๋ฅผ ๋ฐํํ๋ Getter ํจ์๋ฅผ ๋ง๋ค์ด์ ํธ์ถํ๋๊ฒ์ด ์ ์ ๊ฑด๊ฐ์ ์ด๋กญ๋ค.
# Shared object file ๊ณต์ ๋ชฉ์ ํ์ผ : ๋ผ์ด๋ธ๋ฌ๋ฆฌ
# Static lib
์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ฌ์ฉ์ ์
์ฅ์์๋ ์ปดํ์ผ๋ ๋ชฉ์ ํ์ผ ์งํฉ๋ง ํ์ํ๋ฉด ๋๋ค.
ํ๋๋ ํ์ผ ๋ํ ์ฌ๋ฌ๊ฐ๋ฉด ๋ฒ๊ฑฐ๋ก์ฐ๋ ํตํฉ๋ ํ๊ฐ์ ํ์ผ๋ง ์์๋ผ๊ณ ์๊ฐํ๊ฒ ๋ฐ๋ก ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.
์ต์ด์ ์ปดํ์ผ ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ๋ง ๊ฐ์ง๊ณ , ๋งํน์์ ํฉ์น๊ธฐํด์ ์ต์ข
์คํํ์ผ์ ์คํํ์ผ์ ๋ชจ๋ ๊ฒ์ด ๋ค ๋ค์ด๊ฐ์๋ค. (์คํํ์ผ ์ฉ๋๋ ๊ทธ๋งํผ ์ฆ๊ฐ)
๊ทธ๋์ ๋ด์ฉ๋ฌผ์ ๋ฌถ์ด ํ๋์ object file๋ง๋ค๊ณ , ํค๋ํ์ผ์ ์ ๊ณต โ ์ฌ์ฉ์๋ ํค๋ ํ์ผ์ includeํ์ฌ ํจ์๋ฅผ ํธ์ถํ๊ณ ๋ง์ปค ๋จ๊ณ์์ ๋ฌถ์ object file์ ํตํด ์คํํ์ผ๋ก ๋ง๋๋ ๋ฐฉ์์ด๋ค.
๋ฆฌ๋
์ค์์๋ .a ์๋์ฐ์ฆ์์๋ .lib ํ์ฅ์๋ฅผ ์ฌ์ฉํ๋ค.
# Dynamic Link Lib
๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ([Widows DLL ref](https://learn.microsoft.com/en-us/windows/win32/dlls/dynamic-link-libraries) )
static lib๋ ์คํ ํ์ผ์ ๋ง๋๋ ๊ณผ์ ์์ ๋ณด๋ฉด ๊ตฐ๋๋๊ธฐ ์์ด ๊น๋ํ ๋ฐฉ์์ด๋ค.
ํ์ง๋ง, ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฌ์ฉ์ ์ ๋ง ๋ง์ ์คํ ํ์ผ์์ ๋์์ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํด๋ณด์.
๊ทธ๋ฌ๋ฉด ๋ชจ๋ ์คํํ์ผ์ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋งํนํ์ฌ ๋ง๋ค ์๋์๋ค.
๊ทธ๋ฌ๋ฉด ํด๋น ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ จ๋ ๊ฒ์ด ๊ฐ๋ณ ํ๋ก์ธ์ค๋ง๋ค ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ ๋ ๊ฒ์ด๋ค.
๋ฉ๋ชจ๋ฆฌ ์ ์ฒด์ ์
์ฅ์์๋ณด๋ฉด ๋์ผํ ์ฝ๋ ๋ก์ง์ด ํ๋ก์ธ์ค ๋ณ ๋ฉ๋ชจ๋ฆฌ์ ๋ชจ๋ ์ฌ๋ผ๊ฐ ์๋ ์
์ด๋ค.
์ถ๊ฐ๋ก ์ฐธ์กฐํ๋ ๋ชจ๋ ์คํ ํ์ผ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ค.
์ด๊ฒ ๋นํจ์จ์ ์ด๋ผ ํ๋จํ์ฌ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ํ๋ฒ๋ง ์ ์ฌํ๊ณ ์ฌ๋ฌ ์คํํ์ผ์์ ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐธ์กฐ๋งํ์ฌ ์ฌ์ฉํ ์ ์๋๋ก ๊ตฌ์กฐ๋ฅผ ์ก์๋ค.
๋ฆฌ๋
์ค์์๋ .so ํ์ผ ํ์ฅ์๋ก ์๋์ฐ์ฆ์์ ํํ๋งํ๋ DLL ํ์ฅ์ ํ์ผ์ด ์ฌ๊ธฐ์ ํด๋นํ๋ค.
์๋๋ฐฉ์์ ํฌ๊ฒ ๋๊ฐ์ง๋ก ๋๋๋ค.
1. **implicit load-time linking :** Loader๊ฐ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฌํ๋ ๋์ DLL๋ ๊ฐ์ด ์ ์ฌ๋ฅผ ํ๋ค. ์ด๋ ์ด ์์
์ ํ๋ ์ฃผ์ฒด๋ฅผ Dynamic linker๋ผ ํ๋ค.

DLL ์ ์ฒ์์ ์์ฑ์์ ๋๊ฐ์ง ํ์ผ์ด ๋ง๋ค์ด์ง๋ค dll, lib ํ์ผ
- dll์ด ์ค์ ๋๋ถ๋ถ์ mainํจ์์๋ ํ์ผ์ด๊ณ , ์ค์ ๋ก๋ฉ์์ ์ฌ์ฉ (dll ํ์ผ์ด ์ ๊ณตํ๋ ํจ์๋ **.edata ์น์
์ ์กด์ฌํ๋ค**)
- lib ํ์ผ์ ๋งํน์์ ์ฌ์ฉ ์ฐธ์กฐ๋ฅผ ์๋ ค์ฃผ๋ ์ญํ
๋งํน์์ ์ฌ์ฉ ํจ์์ ๊ตฌํ์ฒด๊ฐ ์๋ ๊ฒฝ์ฐ ๋น์ฐํ ๋งํน์๋ฌ๊ฐ ๋ฐ์ํ๋ค. ์ด๋ .lib ํ์ผ์ด ๋งํน์์ ํด๋น ํจ์์ ๊ตฌํ์ฒด๊ฐ DLL์ ์์์ ์ธ์งํ๋ค. (์ด์ ๋ํ ์ ๋ณด๋ .**idata ์น์
์ ์กด์ฌํ๋ค**)
๊ทธ๋ฌ๊ณ ํ์ผ ์คํ์์ ๋ก๋๊ฐ ํด๋น DLLํ์ผ์ ์ค์ ๋ก ๋ก๋ํ๋ฉด์ ํจ์์ ์์น๋ฅผ ๊ฐ๋ฅดํค๊ฒํ๋ค.
 ์คํํ์๋ง์ dll ํ์ผ์ด ์์ผ๋ฉด ์ด๋ฐ ์๋ฌ๊ฐ ๋ฐ๊ฑฐ๋ค.
1. **explicit run-time linking :** ์์คํ์ผ์์ ์ง์ DLL open(dlopen, LoadLibrary) ํจ์๋ฅผ ํธ์ถํ์ฌ DLL์ ๋ก๋ฉํ๋ ๊ฒฝ์ฐ

ํจ์ ํธ์ถ์ ํ์ฌ DLL์ ์์ฑ ์ฝ๋ ๋ก์ง์ ์ง์ ๋ก๋๋ฅผ ํ๋ ๋ฐฉ๋ฒ์ด๋ค.
๋ก๋ํ DLL์์ ํน์ ํจ์๋ช
์ ๋ฐ๋ฅธ ์ง์ ํจ์ ์ฃผ์๋ฅผ ๋ถ๋ฌ์ ํจ์ํฌ์ธํฐ๋ก ์ ์ฅํ๊ณ ์ด ํจ์ํฌ์ธํฐ๋ฅผ ํธ์ถํ์ฌ ๊ฐ์ ์ฌ์ฉํ๋ค.
๋น์ฐํ ์ปดํ์ผ๋จ์์๋ ์ด๋ค DLL์ ๋ก๋ํ๋์ง, ์ด๋ค ํจ์๋ฅผ ์ฌ์ฉํ ์ง **์ปดํ์ผํ์์ ํ์
์ด ๋ถ๊ฐ๋ฅ**ํ์ฌ ์คํํ์ผ์ ๋ณธ์ธ์ด DLL์ ์ฌ์ฉํ๋์ง ์กฐ์ฐจ ์ ์ ์๋ค.
## ๋ชจ๋
์ต์ ์ธ์ด๋ค์ ์ฌ์ฉ ๋ฐฉ๋ฒ
include๋ฐ์๋ ์ ๋ง ์๋ ์ธ์ด์๋ ํด๋น ๊ธฐ๋ฅ์ด๋ค. ์ต์ ์ธ์ด์๋ ๋ชจ๋ ๋ฐฉ์์ ์ฑํํ๊ณ ์๋ค.
include๋ ๋ณด๋ฉด ์๊ฒ ์ง๋ง **ํค๋ํ์ผ ์ ์ฒด**๋ฅผ ๋ณต์ฌ ๋ถ์ฌ๋ฃ๊ธฐํ๋ค.
cpp ๊ฐ๋ณ ํ์ผ ๊ธฐ์ค์ผ๋ก ๋ณด๋ฉด ๋ชจ๋ ํค๋ ํ์ผ์ ์๋ ๋ชจ๋ ์ ๋ณด๊ฐ ํ์ํ ์ผ์ ๋ณดํต ์๋ค.
์ ํค๋ ํ์ผ์กฐ์ฐจ ์ชผ๊ฐ์ ํน์ ํจ์ ํ๋๋ง ๊ฐ์ ธ๋ค ์ฐ์๋ผ๋ ๋ฐฉ์์์ ์๊ฒจ๋ฌ๋ค.
# Windows FE ํฌ๋งท ์ค์ ๋ถ์
์ ์ง์ ํ๋ฒ ํ์ธํด๋ณด์
```
```
func1 ํ์ผ์ด ์์ด์ **๋น์ฐํ ๋ง์ปค์๋ฌ๊ฐ ๋ฐ์**ํ๋ค.
๊ทธ๋ผ objํ์ผ์ ์์ฑ ๋์ด์์ผ๋ ์ obj ํ์ผ์ ํ๋ฒ PEView ๋ก ์ด์ด๋ณด์
๋ช
์ฌํ์ ํ์ผ์ ๊ฒฐ๊ตญ ๊ทธ๋ฅ ์ด์ง์ ๋ฉ์ด๋ฆฌ๋ค. PEView๋ ๊ฒฐ๊ตญ์ ์ด์ง ๋ช
๋ น์ด๋ฅผ ๋ถ์ํด๋ดค์ผ๋ฉด ์๊ฒ ์ง๋ง ์ด์ง ๋ฉ์ด๋ฆฌ๋ฅผ ๊ท์น์๋ฐ๋ผ ๊ทธ๋ฅ ๋ช๋ฐ์ดํธ ์ฉ์ฝ๊ณ ํด์ ํด๋์ ๊ฒ์ ๋ถ๊ณผํ๋ค.
๊ท์น๋ง ์์ผ๋ฉด ์ฐ๋ฆฌ๋ PEView๋ฅผ ๋ง๋ค ์ ์๋ค
**drectve :** ๋ง์ปค์ต์
์ด ๋ค์ด์๋ค

- debug\$S ์ฌ๋ณผ ์ ๋ณด

- data : ์ด๊ธฐํ๋ ์ ์ญ๋ณ์ ๋ฐ ์ ์ ๋ณ์์ ๊ฐ์ด ๋ค์ด์๋ค. global ๋ฐ staticVAr

- rdata ์ด๊ธฐํ๋ ์ฝ๊ธฐ ์ ์ฉ ๋ฐ์ดํฐ (์คํธ๋ง)

์ ์ด์ ์ด์
์ ๊น๋ณด์ ์ด์
์ PE View์์ ๋ชป๋ณด๋ ๋ฏํด์ ๋ค๋ฅธ ํด์ ์ฐพ์๋ดค์๋
๊ณต์์ผ๋ก ์ ๊ณตํ๋ ๊ฒ ์ค์๋ Visual Studio msvc ๋ด์ฅ ํด์ธ [dumpbin.exe](https://learn.microsoft.com/en-us/cpp/build/reference/dumpbin-reference?view=msvc-170) ์ผ๋ก ์ง์ ๋ณผ ์๋ ์๋ค.
๊ณต์์ ์ผ๋ก ์ง์ํ๋ ํด์ธ ๋งํผ ๊ฐ์ฅ ์ ํํ๊ณ ํ์คํ๋ค๊ณ ๋ณผ ์ ์๋ค.
visual studio ์ค์น ํด๋์์์ ํด๋น ํ์ผ๋ก ๊ฒ์ํ๋ฉด ๋์จ๋ค.
์ด ํด์ ํตํด์ obj text section์ Disasmํ ๊ฒฐ๊ณผ๋ ๋ณผ ์ ์๋ค
```
```
```
```
```
```
์ด์
์์ ์ค์ ๋ก ์ฐธ์กฐ๊ฐ ํ์ํ ๊ณณ์ ๋ชจ๋ 0์ผ๋ก ๋ฐ๋ ค์๋ค. ๊ทธ๋ผ ์ด๋ป๊ฒ disasemble๋ก ๋ณ์๋ฅผ ์ ํํ๊ฒ ์ง์ด๋์๊น?
ํด๋น ์ ๋ณด๋ค์ ๊ฐ๋ณ๋ก **COFF ์ฌ๋ฐฐ์น** ํ
์ด๋ธ์ ์กด์ฌํ๋ค.
```
```
์ต์ข
์ ์ธ ์ ์ฒด ํด๋น OBJ์ COFF SYMBOL TABLE ์ด๋ค
```
```
์ค๊ฐ์ Static, External, Label ๋ ์ค๋ช
์ด ์์ด๋ ๊ฐ๊ฐ ์ด๋ค ์๋ฏธ์ธ์ง ์ ์ ์์๊ฑฐ๋ผ ์๊ฐํ๋ค
๋งํฌ์๋ฌ๋ฅผ ๋ฑ์ func1 ์ ์ง์ฐ๊ณ ์ปดํ์ผ์ ํ์๋
์ต์ข
์ปดํ์ผ ๋ ์ฝ๋์ main ํจ์ disasm ์ด๋ค
```
```
์ฐธ์กฐ๊ฐ ํ์ํ ๋ณ์๋ค์ ์ฃผ์๋ฅผ ์ ๋ ์ฐธ์กฐํ์ฌ ์ฌ๋ฐฐ์นํ์๋ค.
notepad์ import ํ์ผ์ ํ๋ฒ ๋ณด์.
```
```
๋์ถฉ ์ด๋ฐ๋๋์ด๋ค.
- csapp 7์ฅ ๋ง์ปค
- [\[CS:APP 13-1\] Linking 1 - ์ด๋ป๊ฒ ๋งํน ์๋ฌ๋ฅผ ํผํ ๊น](https://blog.kurcreative.com/kur1701091416)
- [\[CS:APP 13-2\] Linking 2 - ์ ์ ๋งํนlib๊ณผ ๋์ ๋งํนdll](https://blog.kurcreative.com/kur1701091636)
Posted 2024-08-09
[etc](https://eeeuns.github.io/tags/#etc)
Please enable JavaScript to view the [comments powered by Disqus.](https://disqus.com/?ref_noscript) |
| Readable Markdown | null |
| Shard | 143 (laksa) |
| Root Hash | 2566890010099092343 |
| Unparsed URL | io,github!eeeuns,/2024/08/09/understandingcomputercompileo/ s443 |