์ด์ ๋ธ๋ฆฌ์ด์ ์๋ฆฌ, ์์ฉ ๋ฐ ํ๋ ์ปดํจํ ์์์ ์ค์์ฑ์ ํ๊ตฌํ๋ ์ข ํฉ ๊ฐ์ด๋์ ๋๋ค. ๋ก์ฐ๋ ๋ฒจ ํ๋ก๊ทธ๋๋ฐ์ ์ฝ๊ณ , ์ดํดํ๊ณ , ์ ๋๋ก ํ์ฉํ๋ ๋ฒ์ ๋ฐฐ์๋ณด์ธ์.
์ด์ ๋ธ๋ฆฌ์ด: ๋ก์ฐ๋ ๋ฒจ ์ฝ๋์ ๋น๋ฐ์ ํํค์น๋ค
ํ์ด์ฌ, ์๋ฐ, C++์ ๊ฐ์ ๊ณ ์์ค ์ธ์ด๊ฐ ์ฃผ๋ฅผ ์ด๋ฃจ๋ ์ปดํจํฐ ํ๋ก๊ทธ๋๋ฐ์ ์ธ๊ณ์๋ ์ด ๋ชจ๋ ๊ฒ์ ๊ตฌ๋ํ๋ ๊ธฐ์ด ๊ณ์ธต์ธ ์ด์ ๋ธ๋ฆฌ์ด๊ฐ ์กด์ฌํฉ๋๋ค. ์ด ๋ก์ฐ๋ ๋ฒจ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ์ปดํจํฐ ํ๋์จ์ด์ ๋ํ ์ง์ ์ ์ธ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํ์ฌ, ์ํํธ์จ์ด๊ฐ ๊ธฐ๊ณ์ ์ด๋ป๊ฒ ์ํธ ์์ฉํ๋์ง์ ๋ํ ๋ ๋ณด์ ์ธ ์ ์ด๋ ฅ๊ณผ ํต์ฐฐ๋ ฅ์ ์ ๊ณตํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์์๋ ๊ณ ์์ค ์ธ์ด๋งํผ ๋๋ฆฌ ์ฌ์ฉ๋์ง๋ ์์ง๋ง, ์ด์ ๋ธ๋ฆฌ์ด๋ ์์คํ ํ๋ก๊ทธ๋๋ฐ, ์๋ฒ ๋๋ ์์คํ ๊ฐ๋ฐ, ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง ๋ฐ ์ฑ๋ฅ ์ต์ ํ์ ์์ด ์ฌ์ ํ ์ค์ํ ๋๊ตฌ์ ๋๋ค.
์ด์ ๋ธ๋ฆฌ์ด๋ ๋ฌด์์ธ๊ฐ?
์ด์ ๋ธ๋ฆฌ์ด๋ ์ปดํจํฐ์ ์ค์ ์ฒ๋ฆฌ ์ฅ์น(CPU)๊ฐ ์ง์ ์คํํ๋ ์ด์ง ๋ช ๋ น์ด์ธ ๊ธฐ๊ณ์ด์ ๊ธฐํธ์ ํํ์ ๋๋ค. ๊ฐ ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด๋ ์ผ๋ฐ์ ์ผ๋ก ๋จ์ผ ๊ธฐ๊ณ์ด ๋ช ๋ น์ด์ ํด๋นํ๋ฏ๋ก, ์ธ๊ฐ์ด ์ฝ์ ์ ์๋ (์ฌ์ ํ ๋งค์ฐ ์ํธ ๊ฐ์ง๋ง) ํํ์ ํ๋ก๊ทธ๋๋ฐ์ ๋๋ค.
๊ธฐ์ ํ๋์จ์ด์ ๋ณต์ก์ฑ์ ์ถ์ํํ๋ ๊ณ ์์ค ์ธ์ด์ ๋ฌ๋ฆฌ, ์ด์ ๋ธ๋ฆฌ์ด๋ ๋ ์ง์คํฐ, ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์ฑ, ๋ช ๋ น์ด ์งํฉ์ ํฌํจํ ์ปดํจํฐ ์ํคํ ์ฒ์ ๋ํ ๊น์ ์ดํด๋ฅผ ํ์๋ก ํฉ๋๋ค. ์ด๋ฌํ ์์ค์ ์ ์ด๋ ฅ์ ํตํด ํ๋ก๊ทธ๋๋จธ๋ ์ฝ๋๋ฅผ ๋ฏธ์ธ ์กฐ์ ํ์ฌ ์ต๊ณ ์ ์ฑ๋ฅ๊ณผ ํจ์จ์ฑ์ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
์ฃผ์ ํน์ง:
- ๋ก์ฐ๋ ๋ฒจ ์ถ์ํ: ๊ธฐ๊ณ์ด ์์ ์ต์ํ์ ์ถ์ํ ๊ณ์ธต์ ์ ๊ณตํฉ๋๋ค.
- ์ง์ ์ ์ธ ํ๋์จ์ด ์ ๊ทผ: CPU ๋ ์ง์คํฐ์ ๋ฉ๋ชจ๋ฆฌ ์์น๋ฅผ ์ง์ ์กฐ์ํ ์ ์์ต๋๋ค.
- ์ํคํ ์ฒ ํน์ ์ : ์ด์ ๋ธ๋ฆฌ์ด๋ ํน์ CPU ์ํคํ ์ฒ(์: x86, ARM, MIPS)์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
- ์ผ๋์ผ ๋์: ์ผ๋ฐ์ ์ผ๋ก ํ๋์ ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด๋ ํ๋์ ๊ธฐ๊ณ์ด ๋ช ๋ น์ด๋ก ๋ณํ๋ฉ๋๋ค.
์ด์ ๋ธ๋ฆฌ์ด๋ฅผ ์ ๋ฐฐ์์ผ ํ ๊น?
๊ณ ์์ค ์ธ์ด๋ ํธ๋ฆฌํจ๊ณผ ์ด์์ฑ์ ์ ๊ณตํ์ง๋ง, ์ด์ ๋ธ๋ฆฌ์ด๋ฅผ ๋ฐฐ์์ผ ํ๋ ๋ช ๊ฐ์ง ๊ฐ๋ ฅํ ์ด์ ๊ฐ ์์ต๋๋ค:
1. ์ปดํจํฐ ์ํคํ ์ฒ์ ์ดํด
์ด์ ๋ธ๋ฆฌ์ด๋ ์ปดํจํฐ๊ฐ ์ค์ ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง๋ฅผ ๋ค์ฌ๋ค๋ณผ ์ ์๋ ๋ ๋ณด์ ์ธ ์ฐฝ์ ์ ๊ณตํฉ๋๋ค. ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋ถ์ํจ์ผ๋ก์จ CPU ๋ ์ง์คํฐ, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ๋ฐ ๋ช ๋ น์ด ์คํ์ ๋ํ ๊น์ ์ดํด๋ฅผ ์ป์ ์ ์์ต๋๋ค. ์ด ์ง์์ ์ฃผ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ์๊ด์์ด ์ปดํจํฐ ์์คํ ์ ๋ค๋ฃจ๋ ๋ชจ๋ ์ฌ๋์๊ฒ ๋งค์ฐ ๊ท์คํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์ด์ ๋ธ๋ฆฌ์์ ์คํ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๋ฉด ๊ณ ์์ค ์ธ์ด์์์ ํจ์ ํธ์ถ๊ณผ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๋ํ ์ดํด๋ฅผ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
2. ์ฑ๋ฅ ์ต์ ํ
์ฑ๋ฅ์ด ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ด์ ๋ธ๋ฆฌ์ด๋ ์ฝ๋๋ฅผ ์ต๊ณ ์ ์๋์ ํจ์จ์ฑ์ผ๋ก ์ต์ ํํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. CPU์ ๋ฆฌ์์ค๋ฅผ ์ง์ ์ ์ดํจ์ผ๋ก์จ ์ค๋ฒํค๋๋ฅผ ์ ๊ฑฐํ๊ณ ํน์ ํ๋์จ์ด์ ๋ง๊ฒ ์ฝ๋๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค.
๊ณ ๋น๋ ๋งค๋งค ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ฐํ๋ค๊ณ ์์ํด ๋ณด์ธ์. ๋ชจ๋ ๋ง์ดํฌ๋ก์ด๊ฐ ์ค์ํฉ๋๋ค. ์ฝ๋์ ์ค์ํ ๋ถ๋ถ์ ์ด์ ๋ธ๋ฆฌ์ด๋ก ์ต์ ํํ๋ฉด ์๋นํ ๊ฒฝ์ ์ฐ์๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค.
3. ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง
์ด์ ๋ธ๋ฆฌ์ด๋ ์ข ์ข ์์ค ์ฝ๋ ์์ด ์ํํธ์จ์ด์ ๊ธฐ๋ฅ์ ์ดํดํ๊ธฐ ์ํด ๋ถ์ํ๋ ๊ณผ์ ์ธ ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง์ ํ์์ ์ ๋๋ค. ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ ๋์ค์ด์ ๋ธ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ธฐ๊ณ์ด๋ฅผ ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ก ๋ณํํ ๋ค์, ์ด๋ฅผ ๋ถ์ํ์ฌ ์ทจ์ฝ์ ์ ์๋ณํ๊ณ , ์๊ณ ๋ฆฌ์ฆ์ ์ดํดํ๊ฑฐ๋ ์ํํธ์จ์ด์ ๋์์ ์์ ํฉ๋๋ค.
๋ณด์ ์ฐ๊ตฌ์๋ค์ ์ข ์ข ์ด์ ๋ธ๋ฆฌ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ์จ์ด๋ฅผ ๋ถ์ํ๊ณ ๊ณต๊ฒฉ ๋ฒกํฐ๋ฅผ ์ดํดํฉ๋๋ค.
4. ์๋ฒ ๋๋ ์์คํ ๊ฐ๋ฐ
์๋ฒ ๋๋ ์์คํ ์ ๋ค๋ฅธ ์ฅ์น(์: ์๋์ฐจ, ๊ฐ์ ์ ํ, ์ฐ์ ์ฅ๋น) ๋ด์ ๋ด์ฅ๋ ํน์ ์ปดํจํฐ ์์คํ ์ผ๋ก, ์ข ์ข ๋ฆฌ์์ค๊ฐ ์ ํ๋์ด ์๊ณ ํ๋์จ์ด์ ๋ํ ์ ๋ฐํ ์ ์ด๊ฐ ํ์ํฉ๋๋ค. ์ด์ ๋ธ๋ฆฌ์ด๋ ์๋ฒ ๋๋ ์์คํ ๊ฐ๋ฐ์์ ํฌ๊ธฐ์ ์ฑ๋ฅ์ ๋ง๊ฒ ์ฝ๋๋ฅผ ์ต์ ํํ๊ธฐ ์ํด ์์ฃผ ์ฌ์ฉ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, ์๋์ฐจ์ ์ ๊น ๋ฐฉ์ง ๋ธ๋ ์ดํฌ ์์คํ (ABS)์ ์ ์ดํ๋ ค๋ฉด ์ ๋ฐํ ํ์ด๋ฐ๊ณผ ์ง์ ์ ์ธ ํ๋์จ์ด ์ ์ด๊ฐ ํ์ํ๋ฏ๋ก ์์คํ ์ ํน์ ๋ถ๋ถ์ ์ด์ ๋ธ๋ฆฌ์ด๊ฐ ์ ํฉํ ์ ํ์ด ๋ฉ๋๋ค.
5. ์ปดํ์ผ๋ฌ ์ค๊ณ
์ด์ ๋ธ๋ฆฌ์ด๋ฅผ ์ดํดํ๋ ๊ฒ์ ๊ณ ์์ค ์ฝ๋๋ฅผ ํจ์จ์ ์ธ ๊ธฐ๊ณ์ด๋ก ๋ณํํด์ผ ํ๋ ์ปดํ์ผ๋ฌ ์ค๊ณ์์๊ฒ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋์ ์ํคํ ์ฒ์ ์ด์ ๋ธ๋ฆฌ์ด์ ๊ธฐ๋ฅ์ ์ดํดํจ์ผ๋ก์จ ์ปดํ์ผ๋ฌ ์ค๊ณ์๋ ์ต์ ํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ์ปดํ์ผ๋ฌ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค.
์ด์ ๋ธ๋ฆฌ์ ๋ณต์ก์ฑ์ ์๋ฉด ์ปดํ์ผ๋ฌ ๊ฐ๋ฐ์๊ฐ ํน์ ํ๋์จ์ด ๊ธฐ๋ฅ์ ๋์์ผ๋ก ํ๋ ์ฝ๋ ์์ฑ๊ธฐ๋ฅผ ์์ฑํ์ฌ ์๋นํ ์ฑ๋ฅ ํฅ์์ ์ด๋์ด๋ผ ์ ์์ต๋๋ค.
์ด์ ๋ธ๋ฆฌ์ด ๊ธฐ์ด: ๊ฐ๋ ์ ๊ฐ์
์ด์ ๋ธ๋ฆฌ์ด ํ๋ก๊ทธ๋๋ฐ์ CPU์ ๋ ์ง์คํฐ์ ๋ฉ๋ชจ๋ฆฌ ๋ด์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ๋ ๊ฒ์ ์ค์ฌ์ผ๋ก ์ด๋ฃจ์ด์ง๋๋ค. ๋ช ๊ฐ์ง ๊ธฐ๋ณธ ๊ฐ๋ ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
๋ ์ง์คํฐ
๋ ์ง์คํฐ๋ CPU ๋ด์ ์๊ณ ๋น ๋ฅธ ์ ์ฅ ๊ณต๊ฐ์ผ๋ก, ํ๋ฐํ๊ฒ ์ฒ๋ฆฌ๋๋ ๋ฐ์ดํฐ์ ๋ช ๋ น์ด๋ฅผ ๋ณด๊ดํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๊ฐ CPU ์ํคํ ์ฒ์๋ ๊ณ ์ ํ ๋ชฉ์ ์ ๊ฐ์ง ํน์ ๋ ์ง์คํฐ ์ธํธ๊ฐ ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ ๋ ์ง์คํฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ๋ฒ์ฉ ๋ ์ง์คํฐ: ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ์ฐ์ , ๋ ผ๋ฆฌ ์ฐ์ฐ์ ์ํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค(์: x86์ EAX, EBX, ECX, EDX).
- ์คํ ํฌ์ธํฐ (ESP): ์์ ๋ฐ์ดํฐ์ ํจ์ ํธ์ถ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ธ ์คํ์ ๋งจ ์๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
- ๋ช ๋ น์ด ํฌ์ธํฐ (EIP): ๋ค์์ ์คํ๋ ๋ช ๋ น์ด๋ฅผ ๊ฐ๋ฆฌํต๋๋ค.
- ํ๋๊ทธ ๋ ์ง์คํฐ: ์ด์ ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ํ๋ด๋ ์ํ ํ๋๊ทธ๋ฅผ ํฌํจํฉ๋๋ค(์: ์ ๋ก ํ๋๊ทธ, ์บ๋ฆฌ ํ๋๊ทธ).
๋ฉ๋ชจ๋ฆฌ
๋ฉ๋ชจ๋ฆฌ๋ ํ์ฌ CPU์์ ์ฒ๋ฆฌ๋์ง ์๋ ๋ฐ์ดํฐ์ ๋ช ๋ น์ด๋ฅผ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ๋ฉ๋ชจ๋ฆฌ๋ ๊ฐ๊ฐ ๊ณ ์ ํ ์ฃผ์๋ฅผ ๊ฐ์ง ๋ฐ์ดํธ์ ์ ํ ๋ฐฐ์ด๋ก ๊ตฌ์ฑ๋ฉ๋๋ค. ์ด์ ๋ธ๋ฆฌ์ด๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ๋ฉ๋ชจ๋ฆฌ ์์น์ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ์ ์์ต๋๋ค.
๋ช ๋ น์ด
๋ช ๋ น์ด๋ ์ด์ ๋ธ๋ฆฌ์ด ํ๋ก๊ทธ๋จ์ ๊ธฐ๋ณธ ๊ตฌ์ฑ ์์์ ๋๋ค. ๊ฐ ๋ช ๋ น์ด๋ ๋ฐ์ดํฐ ์ด๋, ์ฐ์ ์ฐ์ฐ ์ํ ๋๋ ์คํ ํ๋ฆ ์ ์ด์ ๊ฐ์ ํน์ ์์ ์ ์ํํฉ๋๋ค. ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด๋ ์ผ๋ฐ์ ์ผ๋ก ์ฐ์ฐ ์ฝ๋(opcode)์ ํ๋ ์ด์์ ํผ์ฐ์ฐ์(๋ช ๋ น์ด๊ฐ ์๋ํ๋ ๋ฐ์ดํฐ ๋๋ ์ฃผ์)๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ผ๋ฐ์ ์ธ ๋ช ๋ น์ด ์ ํ:
- ๋ฐ์ดํฐ ์ ์ก ๋ช ๋ น์ด: ๋ ์ง์คํฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ด๋ํฉ๋๋ค(์: MOV).
- ์ฐ์ ๋ช ๋ น์ด: ์ฐ์ ์ฐ์ฐ์ ์ํํฉ๋๋ค(์: ADD, SUB, MUL, DIV).
- ๋ ผ๋ฆฌ ๋ช ๋ น์ด: ๋ ผ๋ฆฌ ์ฐ์ฐ์ ์ํํฉ๋๋ค(์: AND, OR, XOR, NOT).
- ํ๋ฆ ์ ์ด ๋ช ๋ น์ด: ์คํ ํ๋ฆ์ ์ ์ดํฉ๋๋ค(์: JMP, JZ, JNZ, CALL, RET).
์ฃผ์ ์ง์ ๋ชจ๋
์ฃผ์ ์ง์ ๋ชจ๋๋ ๋ช ๋ น์ด์ ํผ์ฐ์ฐ์์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ์ง์ ํฉ๋๋ค. ์ผ๋ฐ์ ์ธ ์ฃผ์ ์ง์ ๋ชจ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ์ฆ์ ์ฃผ์ ์ง์ : ํผ์ฐ์ฐ์๊ฐ ์์ ๊ฐ์ ๋๋ค.
- ๋ ์ง์คํฐ ์ฃผ์ ์ง์ : ํผ์ฐ์ฐ์๊ฐ ๋ ์ง์คํฐ์ ๋๋ค.
- ์ง์ ์ฃผ์ ์ง์ : ํผ์ฐ์ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๋๋ค.
- ๊ฐ์ ์ฃผ์ ์ง์ : ํผ์ฐ์ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ํฌํจํ๋ ๋ ์ง์คํฐ์ ๋๋ค.
- ์ธ๋ฑ์ค ์ฃผ์ ์ง์ : ํผ์ฐ์ฐ์๊ฐ ๋ฒ ์ด์ค ๋ ์ง์คํฐ์ ์ธ๋ฑ์ค ๋ ์ง์คํฐ๋ฅผ ๋ํ์ฌ ๊ณ์ฐ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๋๋ค.
์ด์ ๋ธ๋ฆฌ์ด ๋ฌธ๋ฒ: ๋ค์ํ ์ํคํ ์ฒ ์ฟ๋ณด๊ธฐ
์ด์ ๋ธ๋ฆฌ์ด ๋ฌธ๋ฒ์ CPU ์ํคํ ์ฒ์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค. ๋ช ๊ฐ์ง ์ธ๊ธฐ ์๋ ์ํคํ ์ฒ์ ๋ฌธ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
x86 ์ด์ ๋ธ๋ฆฌ (์ธํ ๋ฌธ๋ฒ)
x86 ์ํคํ ์ฒ๋ ๋ฐ์คํฌํฑ ๋ฐ ๋ ธํธ๋ถ ์ปดํจํฐ์์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. ์ธํ ๋ฌธ๋ฒ์ x86 ํ๋ก์ธ์๋ฅผ ์ํ ์ผ๋ฐ์ ์ธ ์ด์ ๋ธ๋ฆฌ์ด ๋ฌธ๋ฒ์ ๋๋ค.
์์:
MOV EAX, 10 ; ๊ฐ 10์ EAX ๋ ์ง์คํฐ๋ก ์ด๋ ADD EAX, EBX ; EBX ๋ ์ง์คํฐ์ ๊ฐ์ EAX ๋ ์ง์คํฐ์ ๋ํจ CMP EAX, ECX ; EAX์ ECX ๋ ์ง์คํฐ์ ๊ฐ์ ๋น๊ต JZ label ; ์ ๋ก ํ๋๊ทธ๊ฐ ์ค์ ๋๋ฉด ๋ ์ด๋ธ๋ก ์ ํ
ARM ์ด์ ๋ธ๋ฆฌ
ARM ์ํคํ ์ฒ๋ ๋ชจ๋ฐ์ผ ์ฅ์น, ์๋ฒ ๋๋ ์์คํ ๋ฐ ์ ์ฐจ ์๋ฒ์์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. ARM ์ด์ ๋ธ๋ฆฌ์ด๋ x86๊ณผ ๋น๊ตํ์ฌ ๋ค๋ฅธ ๋ฌธ๋ฒ์ ๊ฐ์ง๋๋ค.
์์:
MOV R0, #10 ; ๊ฐ 10์ R0 ๋ ์ง์คํฐ๋ก ์ด๋ ADD R0, R1 ; R1 ๋ ์ง์คํฐ์ ๊ฐ์ R0 ๋ ์ง์คํฐ์ ๋ํจ CMP R0, R2 ; R0์ R2 ๋ ์ง์คํฐ์ ๊ฐ์ ๋น๊ต BEQ label ; Z ํ๋๊ทธ๊ฐ ์ค์ ๋๋ฉด ๋ ์ด๋ธ๋ก ๋ถ๊ธฐ
MIPS ์ด์ ๋ธ๋ฆฌ
MIPS ์ํคํ ์ฒ๋ ์ข ์ข ์๋ฒ ๋๋ ์์คํ ๊ณผ ๋คํธ์ํน ์ฅ์น์ ์ฌ์ฉ๋ฉ๋๋ค. MIPS ์ด์ ๋ธ๋ฆฌ์ด๋ ๋ ์ง์คํฐ ๊ธฐ๋ฐ ๋ช ๋ น์ด ์ธํธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
์์:
li $t0, 10 ; ์ฆ์ ๊ฐ 10์ $t0 ๋ ์ง์คํฐ์ ๋ก๋ add $t0, $t0, $t1 ; $t1 ๋ ์ง์คํฐ์ ๊ฐ์ $t0 ๋ ์ง์คํฐ์ ๋ํจ beq $t0, $t2, label ; $t0 ๋ ์ง์คํฐ๊ฐ $t2 ๋ ์ง์คํฐ์ ๊ฐ์ผ๋ฉด ๋ ์ด๋ธ๋ก ๋ถ๊ธฐ
์ฐธ๊ณ : ๋ฌธ๋ฒ๊ณผ ๋ช ๋ น์ด ์ธํธ๋ ์ํคํ ์ฒ๋ง๋ค ํฌ๊ฒ ๋ค๋ฅผ ์ ์์ต๋๋ค. ์ ํํ๊ณ ํจ์จ์ ์ธ ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ์์ฑํ๋ ค๋ฉด ํน์ ์ํคํ ์ฒ๋ฅผ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ด์ ๋ธ๋ฆฌ์ด ํ๋ก๊ทธ๋๋ฐ ๋๊ตฌ
์ด์ ๋ธ๋ฆฌ์ด ํ๋ก๊ทธ๋๋ฐ์ ๋๋ ์ฌ๋ฌ ๋๊ตฌ๊ฐ ์์ต๋๋ค:
์ด์ ๋ธ๋ฌ
์ด์ ๋ธ๋ฌ๋ ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ๊ธฐ๊ณ์ด๋ก ๋ณํํฉ๋๋ค. ์ธ๊ธฐ ์๋ ์ด์ ๋ธ๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- NASM (Netwide Assembler): x86๊ณผ ARM์ ํฌํจํ ์ฌ๋ฌ ์ํคํ ์ฒ๋ฅผ ์ง์ํ๋ ๋ฌด๋ฃ ์คํ ์์ค ์ด์ ๋ธ๋ฌ์ ๋๋ค.
- MASM (Microsoft Macro Assembler): Windows์์ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ x86 ํ๋ก์ธ์์ฉ ์ด์ ๋ธ๋ฌ์ ๋๋ค.
- GAS (GNU Assembler): GNU Binutils ํจํค์ง์ ์ผ๋ถ๋ก, ๋ค์ํ ์ํคํ ์ฒ๋ฅผ ์ง์ํ๋ ๋ค์ฉ๋ ์ด์ ๋ธ๋ฌ์ ๋๋ค.
๋์ค์ด์ ๋ธ๋ฌ
๋์ค์ด์ ๋ธ๋ฌ๋ ์ด์ ๋ธ๋ฌ์ ์ญ๊ณผ์ ์ ์ํํ์ฌ ๊ธฐ๊ณ์ด๋ฅผ ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ก ๋ณํํฉ๋๋ค. ์ด๋ ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง ๋ฐ ์ปดํ์ผ๋ ํ๋ก๊ทธ๋จ์ ๋ถ์ํ๋ ๋ฐ ํ์์ ์ ๋๋ค. ์ธ๊ธฐ ์๋ ๋์ค์ด์ ๋ธ๋ฌ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- IDA Pro: ๊ณ ๊ธ ๋ถ์ ๊ธฐ๋ฅ์ ๊ฐ์ถ ๊ฐ๋ ฅํ๊ณ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋์ค์ด์ ๋ธ๋ฌ์ ๋๋ค. (์์ฉ)
- GDB (GNU Debugger): ์ฝ๋ ๋์ค์ด์ ๋ธ๋ ๊ฐ๋ฅํ ๋ฌด๋ฃ ์คํ ์์ค ๋๋ฒ๊ฑฐ์ ๋๋ค.
- Radare2: ๋์ค์ด์ ๋ธ๋ฌ๋ฅผ ํฌํจํ๋ ๋ฌด๋ฃ ์คํ ์์ค ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง ํ๋ ์์ํฌ์ ๋๋ค.
๋๋ฒ๊ฑฐ
๋๋ฒ๊ฑฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ํ ๋จ๊ณ์ฉ ์คํํ๊ณ , ๋ ์ง์คํฐ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฒ์ฌํ๋ฉฐ, ์ค๋จ์ ์ ์ค์ ํ์ฌ ์ค๋ฅ๋ฅผ ์๋ณํ๊ณ ์์ ํ ์ ์์ต๋๋ค. ์ธ๊ธฐ ์๋ ๋๋ฒ๊ฑฐ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- GDB (GNU Debugger): ์ฌ๋ฌ ์ํคํ ์ฒ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ง์ํ๋ ๋ค์ฉ๋ ๋๋ฒ๊ฑฐ์ ๋๋ค.
- OllyDbg: ํนํ ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง์ ์ํด Windows์์ ์ธ๊ธฐ ์๋ ๋๋ฒ๊ฑฐ์ ๋๋ค.
- x64dbg: Windows์ฉ ์คํ ์์ค ๋๋ฒ๊ฑฐ์ ๋๋ค.
ํตํฉ ๊ฐ๋ฐ ํ๊ฒฝ (IDE)
์ผ๋ถ IDE๋ ๊ตฌ๋ฌธ ๊ฐ์กฐ, ์ฝ๋ ์์ฑ, ๋๋ฒ๊น ๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉฐ ์ด์ ๋ธ๋ฆฌ์ด ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํฉ๋๋ค. ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- Visual Studio: MASM ์ด์ ๋ธ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ด์ ๋ธ๋ฆฌ์ด ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํฉ๋๋ค.
- Eclipse: ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ์ด์ ๋ธ๋ฆฌ์ด ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋๋ก ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
์ด์ ๋ธ๋ฆฌ์ด ์ฌ์ฉ์ ์ค์ ์ฌ๋ก
์ค์ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ด์ ๋ธ๋ฆฌ์ด๊ฐ ์ฌ์ฉ๋๋ ๋ช ๊ฐ์ง ์ค์ ์ฌ๋ก๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค:
1. ๋ถํธ๋ก๋
๋ถํธ๋ก๋๋ ์ปดํจํฐ๊ฐ ์์๋ ๋ ์คํ๋๋ ์ฒซ ๋ฒ์งธ ํ๋ก๊ทธ๋จ์ ๋๋ค. ํ๋์จ์ด๋ฅผ ์ด๊ธฐํํ๊ณ ์ด์ ์ฒด์ ๋ฅผ ๋ก๋ํ๋ ์ญํ ์ ํฉ๋๋ค. ๋ถํธ๋ก๋๋ ์๊ณ ๋น ๋ฅด๋ฉฐ ํ๋์จ์ด์ ์ง์ ์ ๊ทผํ ์ ์๋๋ก ์ข ์ข ์ด์ ๋ธ๋ฆฌ์ด๋ก ์์ฑ๋ฉ๋๋ค.
2. ์ด์ ์ฒด์ ์ปค๋
์ด์ ์ฒด์ ์ ํต์ฌ์ธ ์ด์ ์ฒด์ ์ปค๋์ ์ปจํ ์คํธ ์ค์์นญ, ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ, ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๊ฐ์ ์ค์ํ ์์ ์ ์ํด ์ข ์ข ์ด์ ๋ธ๋ฆฌ์ด ์ฝ๋๋ฅผ ํฌํจํฉ๋๋ค. ์ด์ ๋ธ๋ฆฌ์ด๋ฅผ ํตํด ์ปค๋ ๊ฐ๋ฐ์๋ ์ด๋ฌํ ์์ ์ ์ต๊ณ ์ ์ฑ๋ฅ์ผ๋ก ์ต์ ํํ ์ ์์ต๋๋ค.
3. ์ฅ์น ๋๋ผ์ด๋ฒ
์ฅ์น ๋๋ผ์ด๋ฒ๋ ์ด์ ์ฒด์ ๊ฐ ํ๋์จ์ด ์ฅ์น์ ํต์ ํ ์ ์๋๋ก ํ๋ ์ํํธ์จ์ด ๊ตฌ์ฑ ์์์ ๋๋ค. ์ฅ์น ๋๋ผ์ด๋ฒ๋ ์ข ์ข ํ๋์จ์ด ๋ ์ง์คํฐ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ์์น์ ์ง์ ์ ๊ทผํด์ผ ํ๋ฏ๋ก ๋๋ผ์ด๋ฒ์ ํน์ ๋ถ๋ถ์ ์ด์ ๋ธ๋ฆฌ์ด๊ฐ ์ ํฉํ ์ ํ์ด ๋ฉ๋๋ค.
4. ๊ฒ์ ๊ฐ๋ฐ
๊ฒ์ ๊ฐ๋ฐ ์ด์ฐฝ๊ธฐ์๋ ๊ฒ์ ์ฑ๋ฅ์ ์ต์ ํํ๊ธฐ ์ํด ์ด์ ๋ธ๋ฆฌ์ด๊ฐ ๊ด๋ฒ์ํ๊ฒ ์ฌ์ฉ๋์์ต๋๋ค. ํ์ฌ๋ ๊ณ ์์ค ์ธ์ด๊ฐ ๋ ์ผ๋ฐ์ ์ด์ง๋ง, ๊ฒ์ ์์ง์ด๋ ๊ทธ๋ํฝ ๋ ๋๋ง ํ์ดํ๋ผ์ธ์ ํน์ ์ฑ๋ฅ์ด ์ค์ํ ๋ถ๋ถ์๋ ์ฌ์ ํ ์ด์ ๋ธ๋ฆฌ์ด๊ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
5. ์ํธํ
์ํธํ์์๋ ์ํธํ ์๊ณ ๋ฆฌ์ฆ ๋ฐ ํ๋กํ ์ฝ์ ๊ตฌํํ๋ ๋ฐ ์ด์ ๋ธ๋ฆฌ์ด๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด์ ๋ธ๋ฆฌ์ด๋ฅผ ํตํด ์ํธํ์๋ค์ ์๋์ ๋ณด์์ ์ํด ์ฝ๋๋ฅผ ์ต์ ํํ๊ณ ๋ถ์ฑ๋ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋ณดํธํ ์ ์์ต๋๋ค.
์ด์ ๋ธ๋ฆฌ์ด ํ์ต ์๋ฃ
์ด์ ๋ธ๋ฆฌ์ด๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์ํ ์๋ง์ ์๋ฃ๊ฐ ์์ต๋๋ค:
- ์จ๋ผ์ธ ํํ ๋ฆฌ์ผ: ๋ง์ ์น์ฌ์ดํธ์์ ์ด์ ๋ธ๋ฆฌ์ด ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ๋ฌด๋ฃ ํํ ๋ฆฌ์ผ๊ณผ ๊ฐ์ด๋๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋ก tutorialspoint.com๊ณผ assembly.net์ด ์์ต๋๋ค.
- ์์ : ์ฌ๋ฌ ์์ ์์ ์ด์ ๋ธ๋ฆฌ์ด ํ๋ก๊ทธ๋๋ฐ์ ์์ธํ ๋ค๋ฃน๋๋ค. ์๋ก "Assembly Language Step-by-Step: Programming with DOS and Linux" by Jeff Duntemann๊ณผ "Programming from the Ground Up" by Jonathan Bartlett (์จ๋ผ์ธ์์ ๋ฌด๋ฃ๋ก ์ด์ฉ ๊ฐ๋ฅ)์ด ์์ต๋๋ค.
- ๋ํ ๊ฐ์: ๋ง์ ๋ํ์์ ์ปดํจํฐ ์ํคํ ์ฒ ๋ฐ ์ด์ ๋ธ๋ฆฌ์ด ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ๊ฐ์ข๋ฅผ ์ ๊ณตํฉ๋๋ค.
- ์จ๋ผ์ธ ์ปค๋ฎค๋ํฐ: ์ด์ ๋ธ๋ฆฌ์ด ํ๋ก๊ทธ๋๋ฐ ์ ์ฉ ์จ๋ผ์ธ ํฌ๋ผ ๋ฐ ์ปค๋ฎค๋ํฐ๋ ๊ท์คํ ์ง์๊ณผ ์ง์นจ์ ์ ๊ณตํ ์ ์์ต๋๋ค.
์ด์ ๋ธ๋ฆฌ์ด์ ๋ฏธ๋
๊ณ ์์ค ์ธ์ด๊ฐ ์ผ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ๊ณ์ ์ง๋ฐฐํ๊ฒ ์ง๋ง, ์ด์ ๋ธ๋ฆฌ์ด๋ ํน์ ์์ญ์์ ์ฌ์ ํ ๊ด๋ จ์ฑ์ ์ ์งํฉ๋๋ค. ์ปดํจํ ์ฅ์น๊ฐ ๋์ฑ ๋ณต์กํ๊ณ ์ ๋ฌธํ๋จ์ ๋ฐ๋ผ ๋ก์ฐ๋ ๋ฒจ ์ ์ด ๋ฐ ์ต์ ํ์ ๋ํ ํ์์ฑ์ ๊ณ์๋ ๊ฐ๋ฅ์ฑ์ด ๋์ต๋๋ค. ์ด์ ๋ธ๋ฆฌ์ด๋ ๋ค์์ ์ํ ํ์์ ์ธ ๋๊ตฌ๋ก ๊ณ์ ๋จ์ ๊ฒ์ ๋๋ค:
- ์๋ฒ ๋๋ ์์คํ : ๋ฆฌ์์ค ์ ์ฝ๊ณผ ์ค์๊ฐ ์๊ตฌ ์ฌํญ์ผ๋ก ์ธํด ์ธ๋ฐํ ์ ์ด๊ฐ ํ์ํ ๊ฒฝ์ฐ.
- ๋ณด์: ๋ฉ์จ์ด ๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง ๋ฐ ์ทจ์ฝ์ ์๋ณ์ ์ํด.
- ์ฑ๋ฅ์ด ์ค์ํ ์ ํ๋ฆฌ์ผ์ด์ : ๊ณ ๋น๋ ๋งค๋งค๋ ๊ณผํ ์ปดํจํ ๊ณผ ๊ฐ์ด ๋ชจ๋ ์ฌ์ดํด์ด ์ค์ํ ๊ฒฝ์ฐ.
- ์ด์ ์ฒด์ ๊ฐ๋ฐ: ํต์ฌ ์ปค๋ ๊ธฐ๋ฅ ๋ฐ ์ฅ์น ๋๋ผ์ด๋ฒ ๊ฐ๋ฐ์ ์ํด.
๊ฒฐ๋ก
์ด์ ๋ธ๋ฆฌ์ด๋ ๋ฐฐ์ฐ๊ธฐ ์ด๋ ต์ง๋ง, ์ปดํจํฐ๊ฐ ์ด๋ป๊ฒ ์๋ํ๋์ง์ ๋ํ ๊ทผ๋ณธ์ ์ธ ์ดํด๋ฅผ ์ ๊ณตํฉ๋๋ค. ์ด๋ ๊ณ ์์ค ์ธ์ด๋ก๋ ๋ถ๊ฐ๋ฅํ ๋ ํนํ ์์ค์ ์ ์ด๋ ฅ๊ณผ ์ต์ ํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋ จ๋ ํ๋ก๊ทธ๋๋จธ์ด๋ ํธ๊ธฐ์ฌ ๋ง์ ์ด๋ณด์์ด๋ , ์ด์ ๋ธ๋ฆฌ์ด์ ์ธ๊ณ๋ฅผ ํํํ๋ฉด ์ปดํจํฐ ์์คํ ์ ๋ํ ์ดํด๋ฅผ ํฌ๊ฒ ํฅ์์ํค๊ณ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ์๋ก์ด ๊ฐ๋ฅ์ฑ์ ์ด ์ ์์ต๋๋ค. ๋์ ์ ๋ฐ์๋ค์ด๊ณ , ๋ก์ฐ๋ ๋ฒจ ์ฝ๋์ ๋ณต์ก์ฑ์ ๊น์ด ํ๊ณ ๋ค์ด ์ด์ ๋ธ๋ฆฌ์ด์ ํ์ ๋ฐ๊ฒฌํ์ญ์์ค.
๊ธฐ๋ณธ์ ๋ฐฐ์ฐ๋ ๋์ ์ํคํ ์ฒ(x86, ARM, MIPS ๋ฑ)๋ฅผ ์ ํํ๊ณ ๊พธ์คํ ํ์ตํ๋ ๊ฒ์ ๊ธฐ์ตํ์ญ์์ค. ๊ฐ๋จํ ํ๋ก๊ทธ๋จ์ผ๋ก ์คํํ๊ณ ์ ์ฐจ ๋ณต์ก์ฑ์ ๋์ฌ๊ฐ์ธ์. ์ฝ๋๊ฐ ์ด๋ป๊ฒ ์คํ๋๋์ง ์ดํดํ๊ธฐ ์ํด ๋๋ฒ๊น ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ ค์ํ์ง ๋ง์ญ์์ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ๊ฒ์, ๋ก์ฐ๋ ๋ฒจ ํ๋ก๊ทธ๋๋ฐ์ ๋งคํน์ ์ธ ์ธ๊ณ๋ฅผ ํํํ๋ฉฐ ์ฆ๊ธฐ๋ ๊ฒ์ ๋๋ค!