ํจ์คํธ์บ ํผ์ค ํ๊ธ์ฑ๋ฆฐ์ง 9์ผ์ฐจ : ํ์ค ์ธ์์ ์ปดํจํฐ๊ณตํ ์ง์ with 30๊ฐ์ง ์ค๋ฌด ์๋๋ฆฌ์ค ์ด๊ฒฉ์ฐจ ํจํค์ง Online. ๊ฐ์ ํ๊ธฐ
๋ณธ ํฌ์คํ ์ ํจ์คํธ์บ ํผ์ค ํ๊ธ ์ฑ๋ฆฐ์ง ์ฐธ์ฌ๋ฅผ ์ํด ์์ฑํ์์ต๋๋ค.
Abit.ly ๋ค์ด๋ฐ๊ธฐ
abit.ly
๊ณต๋ถ ์์ ์๊ฐ - 22:48
๊ฐ์์ฅ ๋ชฉ๋ก
์ด๋ฒ ์๊ฐ์๋ ๋ ์ง์คํฐ์ ๋ํด ์ข ๋ ๊น๊ฒ ํํค์ณ๋ณด์, ARABOZA!!!
CPU์ ํต์ฌ ๋ถํ ์ค ํ๋์ธ ๋ ์ง์คํฐ๋ ํ๋ก๊ทธ๋๋ฐ์ ์ต์ ์์ค์์ ์ฝ๋๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํดํ๋ ๋ฐ ์ ๋ง ์ค์ํ ์ญํ ์ ํ๋ค.
godbolt.org์์ C ์ฝ๋๊ฐ ์ด์ ๋ธ๋ฆฌ๋ก ์ด๋ป๊ฒ ๋ณํ๋๋์ง ์ง์ ํ์ธํ๋ฉด์ ๋๋ ์ ์, ์ฐ๋ฆฌ๊ฐ ํ์์ ๋ณด๋ ๋์ ์์ค์ ์ฝ๋์ ๋ฌ๋ฆฌ ์ปดํจํฐ ๋ด๋ถ์์๋ ์๋ง์ ๋ ์ง์คํฐ๋ค์ด ํ๋ ฅํ๋ฉฐ ์๋ํ๋ค๋ ์ฌ์ค์ด ์ ๋ง ์ ๊ธฐํ๋ค.
๋จผ์ ๋ฒ์ฉ ๋ ์ง์คํฐ๋ถํฐ ์ดํด๋ณด์.
๋ฒ์ฉ ๋ ์ง์คํฐ๋ ์ฐ์ฐ ๊ฒฐ๊ณผ์ ์์ ์ ์ฅ, ์ฐ์ ๋ฐ ๋ ผ๋ฆฌ ์ฐ์ฐ, ์ฃผ์ ์์ธ ๋ฑ ๋ค์ํ ์์ ์ ์ฌ์ฉ๋๋ ๋ค๋ชฉ์ ์ ์ฅ ๊ณต๊ฐ์ด๋ค.
๋ํ์ ์ธ ๋ ์ง์คํฐ๋ก๋ EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP, EIP ๋ฑ์ด ์๋๋ฐ, ์ด๋ค์ ๊ด๋ก์ ์ผ๋ก ํน์ ์ญํ ์ ํ์ง๋ง ํ๋ก๊ทธ๋๋จธ์ ์๋๋ ํธ์ถ ๊ท์ฝ(stdcall, Thiscall ๋ฑ)์ ๋ฐ๋ผ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์๋ค.
์๋ฅผ ๋ค์ด, EAX ๋๋ RAX๋ ๋์ฐ๊ธฐ ๋ ์ง์คํฐ๋ก ์ฐ์ ์ด๋ ๋ ผ๋ฆฌ ์ฐ์ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ์ญํ ์ ํ๋ฉฐ, ํจ์์ ๋ฐํ๊ฐ์ด ์ด ๋ ์ง์คํฐ์ ์ ์ฅ๋๋ค. x86-64 ํ๊ฒฝ์์๋ 64๋นํธ ํ์ฅ๋ RAX, 32๋นํธ EAX, 16๋นํธ AX ๊ทธ๋ฆฌ๊ณ AX๋ฅผ ๋ค์ ์์ 8๋นํธ์ธ AH์ ํ์ 8๋นํธ์ธ AL๋ก ์ธ๋ถํํด์ ์ฌ์ฉํ ์ ์์ด. EBX๋ RBX๋ ์ฃผ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๊ธฐ๋ณธ ์ฃผ์๋ฅผ ์ ์ฅํ๋ ์ญํ ์ ํ๋ฉฐ, ๋ฐฐ์ด์ด๋ ๋ฌธ์์ด ๊ฐ์ ๋ฐ์ดํฐ ๊ตฌ์กฐ์์ ๊ธฐ์ค ํฌ์ธํฐ๋ก ํ์ฉ๋๋ค.
ECX ๋๋ RCX๋ ๋ฐ๋ณต๋ฌธ์ด๋ ๋ฃจํ ์คํ ์ ์นด์ดํฐ ์ญํ ์, EDX ๋๋ RDX๋ EAX์ ํจ๊ป ํฐ ์์ ์ฐ์ฐ์ด๋ ๊ณฑ์ , ๋๋์ ๋ฑ์์ ์ฌ์ฉ๋๋ค.
๋ํ ์ธ๋ฑ์ค ๋ ์ง์คํฐ์๋ ์ค์ํ๋ฐ, ESI ๋๋ RSI๋ ๋ฐ์ดํฐ ๋ณต์ฌ๋ ๋ฌธ์์ด ์ฐ์ฐ ์ ์์ค ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ, EDI ๋๋ RDI๋ ๋ฐ์ดํฐ๊ฐ ๋ณต์ฌ๋ ๋ชฉ์ ์ง์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ์ญํ ์ ํ๋ค.
๋ค์์ผ๋ก ํฌ์ธํฐ ๋ ์ง์คํฐ๋ฅผ ๋ณด์.
ESP๋ RSP๋ ์คํ ํฌ์ธํฐ ๋ ์ง์คํฐ๋ก, ํ์ฌ ์คํ์ ์ต์๋จ ์ฃผ์๋ฅผ ์ ์ฅํ์ฌ ํจ์ ํธ์ถ, ์ง์ญ ๋ณ์ ๊ด๋ฆฌ ๋ฑ์ ํ์์ ์ผ๋ก ์ฌ์ฉ๋๋ค. EBP ๋๋ RBP๋ ๋ฒ ์ด์ค ํฌ์ธํฐ ๋ ์ง์คํฐ๋ก ํจ์ ๋ด์์ ์ผ๊ด๋ ๋ฐฉ์์ผ๋ก ์ง์ญ ๋ณ์์ ์ธ์์ ์ ๊ทผํ ์ ์๋๋ก ํด์ค๋ค. EIP ๋๋ RIP๋ ๋ช ๋ น ํฌ์ธํฐ๋ก, ๋ค์์ ์คํํ ๋ช ๋ น์ด์ ์ฃผ์๋ฅผ ๋ด์ ํ๋ก๊ทธ๋จ์ด ์์ฐจ์ ์ผ๋ก ์คํ๋๋๋ก ๊ด๋ฆฌํ๋ ์ค์ํ ์ญํ ์ ํ๋ค.
์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ๋ ์๋๋ฐ, CS(์ฝ๋ ์ธ๊ทธ๋จผํธ), DS(๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ), SS(์คํ ์ธ๊ทธ๋จผํธ) ์ธ์ ES, FS, GS ๋ฑ์ด ์๋ค. ์ด๋ค์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ก ๋ค๋ฅธ ์์ญ์ผ๋ก ๋๋์ด ๊ด๋ฆฌํ๋ฉด์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ฉํ๊ณ ํ๋ก๊ทธ๋จ ๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ฒฉ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
๋ง์ง๋ง์ผ๋ก ํ๋๊ทธ ๋ ์ง์คํฐ(RFLAGS ๋๋ EFLAGS)๋ ์ฐ์ฐ ๊ฒฐ๊ณผ์ ๋ฐ๋ฅธ ์ํ ์ ๋ณด๋ฅผ ๋ด๋ ์ญํ ์ ํ๋ค. Zero Flag๋ ๊ฒฐ๊ณผ๊ฐ 0์ผ ๋, Sign Flag๋ ๊ฒฐ๊ณผ๊ฐ ์์์ผ ๋, Carry Flag๋ ์ฐ์ ์ฐ์ฐ ์ค ์ฌ๋ฆผ์ด๋ ๋ด๋ฆผ์ด ๋ฐ์ํ์ ๋, Overflow Flag๋ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ์ง์ ๋ ๋นํธ ์๋ก ํ์ํ ์ ์์ ๋ ์ค์ ๋๋ค. ์ด์ธ์๋ Parity, Auxiliary Carry, Interrupt Enable/Disable, Direction Flag ๋ฑ์ด ์๋ค.
๊ฐ๊ฐ์ ํ๋๊ทธ๋ ์กฐ๊ฑด๋ถ ๋ถ๊ธฐ ๋ช ๋ น์ด๋ ๋ณต์กํ ์ฐ์ ์ฐ์ฐ, ๋ฌธ์์ด ์ฒ๋ฆฌ ๋ฑ์ ์ฌ์ฉ๋๋ฉด์ CPU๊ฐ ์ฌ๋ฐ๋ฅธ ํ๋ฆ๋๋ก ๋์ํ๋๋ก ๋์์ค๋ค.
๋ณดํต ๋์ ์์ค์ ์ธ์ด๋ ํ๋ ์์ํฌ๋ง ์ ํ๋ค ๋ณด๋ฉด CPU ๋ด๋ถ์ ๋ฏธ์ธํ ์๋ ์๋ฆฌ๋ฅผ ์๊ธฐ ์ฌ์ด๋ฐ godbolt.org ๊ฐ์ ํด๋ก ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ฅผ ์ดํด๋ณด๋ฉด, ์ฐ๋ฆฌ๊ฐ ์์ฑํ ์ฝ๋๊ฐ ์ค์ ๋ก๋ ์ด๋ ๊ฒ ์ฌ๋ฌ ์ข ๋ฅ์ ๋ ์ง์คํฐ์ ํ๋๊ทธ๋ค์ด ํ๋ ฅํ์ฌ "์ค์๊ฐ"์ผ๋ก ์ฒ๋ฆฌ๋๊ณ ์๋ค๋ ์ฌ์ค์ ์์ํ๊ฒ ๋๋ ์ ์๋ค. ์ด์ ๊ฐ์ ์ดํด๋ ์๋ฒ ์ต์ ํ๋ ๋๋ฒ๊น ์, ๋จ์ํ ์ฝ๋ ๋ฌธ์ ๋ก ๋๋๋ ๊ฒ์ด ์๋๋ผ ํ๋์จ์ด์ ๊น์ ๊ด๋ จ์ด ์๋ค๋ ์ ์ ๊นจ๋ซ๊ฒ ํด์ค๋ค.
์ด์ฒ๋ผ x86-64 ์ํคํ ์ฒ์ ๋ ์ง์คํฐ ๊ตฌ์ฑ์ ๋จ์ํ ์ ์ฅ ๊ณต๊ฐ์ ๋์ด์, ํ๋ก๊ทธ๋จ์ ์คํ ํ๋ฆ๊ณผ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ ๋ฐํ๊ฒ ์ ์ดํ๋ ์ค์ํ ์ญํ ์ ํ๋ค. ์์ผ๋ก๋ ์ด๋ฐ ๋ด๋ถ ๊ตฌ์กฐ๋ฅผ ์ดํดํ๋ฉฐ ๋ณด๋ค ํจ์จ์ ์ด๊ณ ์์ ์ ์ธ ์์คํ ์ค๊ณ์ ํ ๊ฑธ์ ๋ ๋์๊ฐ ์ ์์์ผ๋ฉด ์ข๊ฒ ๋ค.
๊ณต๋ถ ์ข ๋ฃ ์๊ฐ - 23:17