์คํ ํ์ผ์ ๋์ค์ด์ ๋ธ๋ฌ๋ฅผ ํตํด ๋ถ์ํ ๋ ๋งํฌ ๋ฐฉ์์ ๋ฐ๋ผ ์ฝ๋์ ๋ฌด์จ ์ฐจ์ด๊ฐ ์๋์ง ์์๋ณด๊ฒ ์ต๋๋ค.
๋งํฌ(Link)
- ์ฌ๋ฌ ๊ฐ์ฒด ํ์ผ(object file)์ ํ๋์ ์คํ ํ์ผ๋ก ๊ฒฐํฉํ๋ ์์
- ์ด ๊ณผ์ ์์ ์คํ๋ ์ฃผ์ ์์น, ์ฐ๊ฒฐํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฒฐ์ ํ๋ค.
๋งํฌ ๋ฐฉ์
1. ์ ์ ๋งํฌ(Static Link)
- ์ปดํ์ผํ ๋ ํ์ํ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์คํ ํ์ผ์ ํฌํจ์ํค๋ ๋ฐฉ๋ฒ
- ์คํ ํ์ผ๋ง ๋ฐฐํฌํ๋ฉด ์์คํ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ด ์์ด๋ ๋์ํ๋ค.
- ๋ชจ๋ ์ฝ๋๊ฐ ํ๋์ ์คํ ํ์ผ์ ํฌํจ๋๋ฏ๋ก ์คํ ์ ๋ก๋ฉ ์๊ฐ์ด ์ ๊ณ ์ฑ๋ฅ์ ํจ์จ์ ์ด์ง๋ง, ํ์ผ ํฌ๊ธฐ๊ฐ ์ปค์ง๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธํ๋ ค๋ฉด ์ ์ฒด ํ๋ก๊ทธ๋จ์ ๋ค์ ๋น๋ํด์ผ ํ๋ค.
2. ๋์ ๋งํฌ(Dynamic Link)
- ์ปดํ์ผํ ๋ ๊ฐ์ฒด ํ์ผ๋ก ์ปดํ์ผ๋๊ณ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋์ ์ฌ๋ณผ(symbol)๋ง ์ฐธ์กฐํ๋ ๋ฐฉ๋ฒ
- ์คํ ์ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ(ex. DLL)์ ์ฐพ์์ ํ๋ก๊ทธ๋จ์ ๋์ ์ผ๋ก ๋ก๋ํ๊ณ ๋งํฌํ๋ค.
- ์คํ ํ์ผ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋์ ์์น๋ฅผ ๋ชจ๋ฅด์ง๋ง ์คํ ์ค์ ํด๋น ์ฝ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ก๋๋๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๊ฐ ์คํ ํ์ผ์ ํฌํจ๋์ง ์๊ธฐ ๋๋ฌธ์ ์คํ ํ์ผ์ ํฌ๊ธฐ๊ฐ ์์์ง๋ค.
- ์ฌ๋ฌ ํ๋ก๊ทธ๋จ์ด ๋์ผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ค์ฌ ํจ์จ์ ์ด๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ๋ง ์ ๋ฐ์ดํธํ๋ฉด ํ๋ก๊ทธ๋จ์ ๋ค์ ๋น๋ํ์ง ์์๋ ๋๋ค.
- ์คํ ํ์ผ ์ธ์๋ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ํจ๊ป ๋ฐฐํฌํด์ผํ์ฌ ๋ฐฐํฌ๊ฐ ๋ณต์กํ๋ค.
- ์คํ ์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ์ฐพ์ ์ ์๊ฑฐ๋ ๋ฒ์ ์ด ๋ง์ง ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋งํฌ ๋ฐฉ์์ ๋ฐ๋ผ ๋์ค์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ ์กฐ๊ธ์ฉ ๋ค๋ฆ ๋๋ค.
ํฌ๊ฒ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋์ ํฌํจ ์ฌ๋ถ์ ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ 2๊ฐ์ง ์ฐจ์ด๊ฐ ์์ต๋๋ค.
๋งํฌ ๋ฐฉ์์ ๋ฐ๋ฅธ ์ฐจ์ด
1. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋ ํฌํจ ์ฌ๋ถ
- ์ ์ ๋งํฌ ๋ฐฉ์์ผ๋ก ์ปดํ์ผ๋ ํ๋ก๊ทธ๋จ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๊ฐ ์คํ ํ์ผ์ ํฌํจ๋๋ค.
- ์๋ฅผ ๋ค์ด OpenSSL์ ์ ์ ๋งํฌํ๋ฉด, libssl.lib, libcrypto.lib์ ์๋ ๋ชจ๋ ํจ์๋ค์ด ์คํ ํ์ผ ๋ด์ ํฌํจ๋๋ค.
- ๋์ค์ด์ ๋ธ๋ฌ์์ ์ด ํจ์๋ค์ ์ง์ ํ์ธํ ์ ์๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ DLL์ ๋ก๋ํ ํ์๊ฐ ์๋ค.
- ๋์ค์ด์
๋ธ๋ ์ฝ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์๊ฐ ์ด๋ฆ์ด ํ์๋๊ณ ์ง์ ํธ์ถ๋๋ ๋ฐฉ์์ผ๋ก ๋ํ๋๋ค.
ex) ์ ์ ๋งํฌ๋ OpenSSL ํจ์ ์์: AES_encrypt
call AES_encrypt
2. ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์
- ๋์ ๋งํฌ ๋ฐฉ์์ผ๋ก ์ปดํ์ผ๋ ํ๋ก๊ทธ๋จ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๊ฐ ์คํ ์ค์ ๋์ ์ผ๋ก ๋ก๋๋๋ค.
- ์คํ ํ์ผ์๋ ํจ์๋ค์ ์ฌ๋ณผ ์ ๋ณด๋ง ํฌํจ๋๊ณ ์ค์ ๊ตฌํ์ DLL์ ์กด์ฌํ๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๊ฐ ํฌํจ๋์ง ์์๊ธฐ ๋๋ฌธ์ ์คํ ์ค์ ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ก๋ํ๋ค.
- ์๋ฅผ ๋ค์ด OpenSSL์ ๋์ ๋งํดํ๋ฉด, ์คํ ์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋๋ฅผ libssl.dll, libcrypto.dll์์ ๋ก๋ํ๋ค.
- ํด๋น ํจ์์ ์ฃผ์๋ฅผ ๊ฐ์ ธ์ค๋ ์ฝ๋๋ง ์กด์ฌํ๋ค.
ex) ๋์ ๋งํฌ๋ OpenSSL ํจ์ ์์: AES_encrypt
mov eax, [Address_of_AES_encrypt]
call eax
Visual Studio๋ฅผ ํตํด ์ปดํ์ผํ ๋ ๊ธฐ๋ณธ ์ค์ ์ ๋์ ๋งํฌ ๋ฐฉ์์ ๋๋ค.
๋์ ์ผ๋ก ๋งํฌ๋ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ค๋ฉด ๊ด๋ จ DLL ํ์ผ์ด ํ์ํฉ๋๋ค.
OpenSSL ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ จ API๋ฅผ ์ฌ์ฉํ ํ๋ก๊ทธ๋จ์ ์คํํ๋ ค๋ฉด, ๊ทธ์ ๊ด๋ จ๋ libcrypto-3-x64.dll์ด ์์ด์ผํฉ๋๋ค.
์ปดํ์ผ ์ด์ผ๊ธฐ๊ฐ ๋์จ ๊น์ ์ปดํ์ผ/๋งํฌ/๋น๋์ ๋ํ ๊ฐ๋ ๋ ์กฐ๊ธ ์ ๋ฆฌํด๋ณด์๋ฉด!
์ปดํ์ผ(Complie)
- ์์ค์ฝ๋ ํ์ผ์ ๊ฐ์ฒด ํ์ผ(object file)๋ก ๋ง๋๋ ๊ณผ์
- ๊ณ ๊ธ์ธ์ด(C/C++ ๋ฑ)์์ ์ ๊ธ์ธ์ด(๊ธฐ๊ณ์ด, ์ด์
๋ธ๋ฆฌ์ด)๋ก ๋ฒ์ญํ๋ ๊ณผ์ ์ด๋ค.
- ๊ณ ๊ธ์ธ์ด๋ฅผ ์ด์ ๋ธ๋ฆฌ๋ก ๋ณํํ๊ณ , ์ด๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํ์ฌ ๊ฐ์ฒด ํ์ผ์ ์์ฑํ๋ค.
๋งํฌ(Link)
- ์ฌ๋ฌ ๊ฐ์ฒด ํ์ผ์ ๊ฒฐํฉํ์ฌ ํ๋์ ์คํ ํ์ผ๋ก ๋ง๋๋ ๊ณผ์
- ์ด๋ ํจ์์ ๋ณ์๋ฅผ ์ฐ๊ฒฐํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจ์ํจ๋ค.
๋น๋(Build)
- ํ๋ก๊ทธ๋จ์ ์ปดํ์ผ ๋ฐ ๋งํฌํ์ฌ ์ต์ข ์ ์ผ๋ก ์คํ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ ๋ง๋๋ ์ ์ฒด ๊ณผ์ ์ ์๋ฏธ
- ์ปดํ์ผ๊ณผ ๋งํฌ ๋จ๊ณ๋ฅผ ๋ชจ๋ ํฌํจํ๋ ์์ ์ ๋น๋๋ผ๊ณ ํ๋ค.
'Study > study' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ์ ํ์ ์ ๋ถํธ ๊ตฌ๋ถ (4) | 2024.11.13 |
---|---|
AES ์ํธํ ๋ฐ์ดํฐ ์ ์ก ํ๋ก๊ทธ๋จ(C++) ๋ฆฌ๋ฒ์ฑ (1) | 2024.11.11 |
์๋ ์คํ ๋ฑ๋ก ํ๋ก๊ทธ๋จ(C++) ๋ฆฌ๋ฒ์ฑ (0) | 2024.11.05 |
SEH, TEB(TIB), PEB์ FS ๋ ์ง์คํฐ๋ฅผ ํตํด ์ ๊ทผํ๋ ๋ฐฉ๋ฒ (0) | 2024.05.14 |
SEH, ์์ธ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ (0) | 2024.05.13 |