1. ์ปดํจํฐ ๊ตฌ์กฐ(Computer Architecture)
์ปดํจํฐ ๊ณผํ์์๋ PC์ค๊ณ๋ฅผ ์ฌ๋ฌ ํ๋์จ์ด๊ฐ ๊ฐ๋ฐ๋๊ณ , ์ด๋ค์ ์กฐ๋ฆฝํด์ ์ปดํจํฐ๊ฐ ์์ฑํ ๊ฒ์ด ์ปดํจํฐ ๊ตฌ์กฐ!
๐๊ฐ์๐
- ์ปดํจํฐ ๊ตฌ์กฐ(Computer Architecture)
- ๋ช ๋ น์ด ์งํฉ ๊ตฌ์กฐ(Instruction Set Architecture, ISA)
- ๋ฒ์ฉ ๋ ์ง์คํฐ(General Register)
- ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ(Segment Register)
- ํ๋๊ทธ ๋ ์ง์คํฐ(Flag Register)
- ๋ช ๋ น์ด ํฌ์ธํฐ ๋ ์ง์คํฐ(Instruction Pointer Register, IP)
์ปดํจํฐ๋ ๊ฐ์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์ํํ๋ ์ฌ๋ฌ ๋ถํ๋ค์ ๋์์ผ๋ก ์๋ํฉ๋๋ค.
CPU๋ ์ปดํจํฐ์ ์๋์ ํต์ฌ์ด ๋๋ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๊ณ , ์ ์ฅ์ฅ์น๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํฉ๋๋ค.
์ด ์ธ์๋ GPU๋ ๊ทธ๋ํฝ ๋ฐ์ดํฐ๋ฅผ, ๋์นด๋๋ ๋คํธ์ํฌ ํต์ ์, ์ฌ์ด๋ ์นด๋๋ ์๋ฆฌ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๊ฒ์ ํนํ
๊ฐ ๋ถํ๋ค์ ํน์ง์ด ๋๋ ทํ์ฌ ์ปดํจํฐ์์ ๊ณ ์ ์ ๊ธฐ๋ฅ์ ์ํํฉ๋๋ค.
์ด์ฒ๋ผ ์๋ก ๋ค๋ฅธ ๋ถํ๋ค์ด ๋ชจ์ฌ์ ‘์ปดํจํฐ’๋ผ๋ ํ๋์ ๊ธฐ๊ณ๋ก์ ์๋ํ ์ ์๋ ๊ฒ์ ์ปดํจํฐ์ ๋ํ ๊ธฐ๋ณธ ์ค๊ณ์ ์กด์ฌ
์ ์ฒด์ ์ธ ์ปดํจํฐ ๊ตฌ์กฐ ์ค์์ ํนํ CPU๊ฐ ์ฌ์ฉํ๋ ๋ช ๋ น์ด์ ๊ด๋ จ๋ ์ค๊ณ
๋ช ๋ น์ด ์งํฉ๊ตฌ์กฐ(Instruction Set Architecture, ISA)
๊ฐ์ฅ ๋๋ฆฌ ์ฌ์ฉ๋๋ ISA ์ค ํ๋๊ฐ ์ธํ ์ x86-64 ์ํคํ ์ฒ์ ๋๋ค.
์ด ์ปค๋ฆฌํ๋ผ ๋ํ x86-64 ์ํคํ ์ฒ๋ฅผ ๋์์ผ๋ก ์์ฑ๋์ผ๋ฏ๋ก, ์ด ์ํคํ ์ฒ๋ฅผ ๊ฐ๋จํ ์ง๊ณ ๋์ด๊ฐ ๊ฒ์ ๋๋ค.
๐ข์ปดํจํฐ ๊ณผํ์ ๋ฐฐ์์ผํ๋ ์ด์
์์คํ ํดํน์ ๊ธฐ์ ์ ์ปดํจํฐ ๊ณผํ์ ๋ฟ๋ฆฌ๋ฅผ ๋๊ณ ์์ต๋๋ค. ๋ฐ๋ผ์ ์๋ จ๋ ์์คํ ํด์ปค๊ฐ ๋๊ธฐ ์ํด์ ๋จ์ํ ์๋ ค์ง ๊ธฐ์ ์ ์ต๋ํ๋ ๊ฒ์ ๊ทธ์น์ง ์๊ณ ๋ฐํ์ด๋๋ ์ปดํจํฐ ๊ณผํ์ ์ดํดํ๊ธฐ ์ํด ๋ ธ๋ ฅํด์ผ ํฉ๋๋ค!!
2. ์ปดํจํฐ ๊ตฌ์กฐ์ ๋ช ๋ น์ด ์งํฉ ๊ตฌ์กฐ
์ปดํจํฐ๊ฐ ํจ์จ์ ์ผ๋ก ์๋ํ ์ ์๋๋ก ํ๋์จ์ด ๋ฐ ์ํํธ์จ์ด์ ๊ธฐ๋ฅ์ ๊ณ ์ํ๊ณ , ์ด๋ค์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ
โ๏ธ์ปดํจํฐ ๊ตฌ์กฐ์ ์ธ๋ถ ๋ถ์ผ
- ๊ธฐ๋ฅ ๊ตฌ์กฐ์ ์ค๊ณ
- ํฐ ๋ ธ์ด๋ง ๊ตฌ์กฐ
- ํ๋ฒ๋ ๊ตฌ์กฐ
- ์์ ๋ ํ๋ฒ๋ ๊ตฌ์กฐ
- ๋ช
๋ น์ด ์งํฉ๊ตฌ์กฐ
- x86, x86-64
- ARM
- MIPS
- AVR
- ๋ง์ดํฌ๋ก ์ํคํ
์ฒ
- ์บ์ ์ค๊ณ
- ํ์ดํ๋ผ์ด๋
- ์ํผ ์ค์นผ๋ผ
- ๋ถ๊ธฐ ์์ธก
- ๋น์์ฐจ์ ๋ช ๋ น์ด ์ฒ๋ฆฌ
- ํ๋์จ์ด ๋ฐ ์ปดํจํ
๋ฐฉ๋ฒ๋ก
- ์ง์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ
์ปดํจํฐ ๊ตฌ์กฐ๋ ์ปดํจํฐ์ ๊ธฐ๋ฅ ๊ตฌ์กฐ์ ๋ํ ์ค๊ณ, ๋ช ๋ น์ด ์งํฉ๊ตฌ์กฐ, ๋ง์ดํฌ๋ก ์ํคํ ์ฒ, ๊ทธ๋ฆฌ๊ณ
๊ธฐํ ํ๋์จ์ด ๋ฐ ์ปดํจํ ๋ฐฉ๋ฒ์ ๋ํ ์ค๊ณ ๋ฑ์ด ํฌํจ๋ฉ๋๋ค.
"์ปดํจํฐ์ ๊ธฐ๋ฅ ๊ตฌ์กฐ์ ๋ํ ์ค๊ณ"๋ ์ปดํจํฐ๊ฐ ์ฐ์ฐ์ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํด
์ด๋ค ๊ธฐ๋ฅ๋ค์ด ์ปดํจํฐ์ ํ์ํ์ง ๊ณ ๋ฏผํ๊ณ , ์ค๊ณํ๋ ๋ถ์ผ
Ex) ๋ํ์ ์ผ๋ก ํฐ ๋ ธ์ด๋ง ๊ตฌ์กฐ, ํ๋ฒ๋ ๊ตฌ์กฐ, ์์ ๋ ํ๋ฒ๋ ๊ตฌ์กฐ๊ฐ ์์ต๋๋ค.
CPU์ ํ๋์จ์ด์ ์ค๊ณ๋ ๋ง์ดํฌ๋ก ์ํคํ ์ฒ(Micro Architecture)๋ผ๊ณ ๋ถ๋ฆฌ๋ฉฐ ์ ์๋ ๋ช ๋ น์ด ์งํฉ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋๋ก, CPU์ ํ๋ก๋ฅผ ์ค๊ณํ๋ ๋ถ์ผ์ ๋๋ค.
ํฐ ๋ ธ์ด๋ง ๊ตฌ์กฐ
์ปดํจํฐ์ ์ฐ์ฐ, ์ ์ด, ์ ์ฅ์ ์ธ ๊ฐ์ง ํต์ฌ ๊ธฐ๋ฅ
์ฐ์ฐ๊ณผ ์ ์ด๋ฅผ ์ํด ์ค์์ฒ๋ฆฌ์ฅ์น(Central Processing Unit, CPU)๋ฅผ, ์ ์ฅ์ ์ํด ๊ธฐ์ต์ฅ์น(memory)๋ฅผ ์ฌ์ฉ
๊ทธ๋ฆฌ๊ณ ์ฅ์น๊ฐ์ ๋ฐ์ดํฐ๋ ์ ์ด ์ ํธ๋ฅผ ๊ตํํ ์ ์๋๋ก ๋ฒ์ค(bus)๋ผ๋ ์ ์ ํต๋ก๋ฅผ ์ฌ์ฉ
์ค์์ฒ๋ฆฌ์ฅ์น๐ง
CPU๋ ํ๋ก๊ทธ๋จ์ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๊ณ ์์คํ ์ ๊ด๋ฆฌํ๋ PC์ ๋๋!!
ํ๋ก์ธ์ค์ ์ฝ๋๋ฅผ ๋ถ๋ฌ์ค๊ณ , ์คํํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ์ผ๋ จ์ ๋ชจ๋ ๊ณผ์ ์ด CPU์์ ์ผ์ด๋ฉ๋๋ค.
CPU๋ ์ฐ์ /๋ ผ๋ฆฌ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๋ ์ฐ์ ๋ ผ๋ฆฌ์ฅ์น(Arithmetic Logic Unit, ALU)์ CPU๋ฅผ ์ ์ดํ๋ ์ ์ด์ฅ์น(Control Unit), CPU์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ ์ง์คํฐ(Register) ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
๊ธฐ์ต์ฅ์น๐พ
๋์ํ๋๋ฐ ํ์ํ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ฉฐ, ์ฉ๋์ ๋ฐ๋ผ ์ฃผ๊ธฐ์ต์ฅ์น์ ๋ณด์กฐ๊ธฐ์ต์ฅ์น๋ก ๋ถ๋ฅ!!
์ฃผ๊ธฐ์ต์ฅ์น๋ ํ๋ก๊ทธ๋จ ์คํ๊ณผ์ ์์ ํ์ํ ๋ฐ์ดํฐ๋ค์ ์์๋ก ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ฉฐ, ๋ํ์ ์ผ๋ก ๋จ(Random-Access Memory, RAM)์ด ์์ต๋๋ค. ์ด์ ๋ฐ๋๋ก ๋ณด์กฐ๊ธฐ์ต์ฅ์น๋ ์ด์ ์ฒด์ , ํ๋ก๊ทธ๋จ ๋ฑ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฅ๊ธฐ๊ฐ ๋ณด๊ดํ๊ณ ์ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. ๋ํ์ ์ผ๋ก ํ๋ ๋๋ผ์ด๋ธ(Hard Disk Drive, HDD), SSD(Solid State Drive)๊ฐ ์์ต๋๋ค.
๋ฒ์ค๐
์ปดํจํฐ ๋ถํ๊ณผ ๋ถํ ์ฌ์ด ๋๋ PC์ PC ์ฌ์ด์ ์ ํธ๋ฅผ ์ ์กํ๋ ํต๋ก!!
๋ํ์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์ด๋ํ๋ ๋ฐ์ดํฐ ๋ฒ์ค(Data Bus), ์ฃผ์๋ฅผ ์ง์ ํ๋ ์ฃผ์ ๋ฒ์ค(Address Bus), ์ฝ๊ธฐ/์ฐ๊ธฐ๋ฅผ ์ ์ดํ๋ ์ ์ด ๋ฒ์ค(Control Bus)๊ฐ ์์ต๋๋ค. ์ด ์ธ์๋ ๋์ ์ด๋ ๋ฐ์ดํฐ ์ ์ก ์ํํธ์จ์ด, ํ๋กํ ์ฝ ๋ฑ๋ ๋ฒ์ค๋ผ๊ณ ๋ถ๋ฆฝ๋๋ค.
๐ก๊ธฐ์ต์ฅ์น๊ฐ ์๋๋ฐ CPU์์ ๋ ์ง์คํฐ๊ฐ ์ ํ์ํ๊ฐ์?
CPU๋ ๊ต์ฅํ ๋น ๋ฅธ ์๋๋ก ์ฐ์ฐ์ ์ฒ๋ฆฌํ๋๋ฐ, ์ด๋ฅผ ์ํด ๋ฐ์ดํฐ์ ๋น ๋ฅธ ๊ตํ์ด ํ์ํฉ๋๋ค.
CPU์ ์ฐ์ฐ์๋๊ฐ ๊ธฐ์ต์ฅ์น์์ ๋ฐ์ดํฐ ๊ตํ์๋๋ณด๋ค ์๋์ ์ผ๋ก ๋น ๋ฅด๊ธฐ ๋๋ฌธ์, ๊ธฐ์ต์ฅ์น๋ง์ ์ฌ์ฉํ๋ฉด ๋ณ๋ชฉํ์์ด ๋ฐ์ํ๊ธฐ์ CPU๋ ๊ตํ์๋๋ฅผ ํ๊ธฐ์ ์ผ๋ก ๋จ์ถํ๊ธฐ ์ํด ๋ ์ง์คํฐ์ ์บ์๋ผ๋ ์ ์ฅ์ฅ์น๋ฅผ ๋ด๋ถ์ ๋ณด์ !
๋ช ๋ น์ด ์งํฉ ๊ตฌ์กฐ(Instruction Set Architecture, ISA)
CPU๊ฐ ํด์ํ๋ ๋ช ๋ น์ด์ ์งํฉ์ ์๋ฏธ
๋ค์ํ ISA ์ถ์ ์ด์ ๋ ๋ชจ๋ ์ปดํจํฐ๊ฐ ๋์ผํ ์์ค์ ์ฐ์ฐ ๋ฅ๋ ฅ์ ์๊ตฌํ์ง ์์ผ๋ฉฐ, ์ปดํจํ ํ๊ฒฝ๋ ๋ค์ํ๊ธฐ ๋๋ฌธ
ํ๋ก๊ทธ๋จ์ ๊ธฐ๊ณ์ด๋ก ์ด๋ฃจ์ด์ ธ ์๋๋ฐ, ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด ์ด ๋ช ๋ น์ด๋ค์ CPU๊ฐ ์ฝ๊ณ , ์ฒ๋ฆฌํฉ๋๋ค.
์์๋ก์จ ์ธํ ์ x86-64๋ ๊ณ ์ฑ๋ฅ ํ๋ก์ธ์๋ฅผ ์ค๊ณํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋กํ CPU๋ค์ ๋ง์ ์ ๋ ฅ์ ์๋ชจํ๋ฉฐ, ๋ฐ์ด๋ ์๋์ ์ผ๋ก ์ฌํฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์์ ์ ์ผ๋ก ์ ๋ ฅ์ ๊ณต๊ธํ ์ ์๊ณ , ๋๊ฐ ์ฅ์น๋ฅผ ๊ตฌ๋นํ๋๋ฐ ๊ณต๊ฐ์์ ๋ถ๋ด์ด ํฌ์ง ์์ ๋ฐ์คํฌํฑ ๋๋ ๋ฉํฑ์ ์ ํฉํฉ๋๋ค.
๋ง์ ์ํคํ ์ฒ ์ค์์ ์ด ์ปค๋ฆฌํ๋ผ์ x86-64์ํคํ ์ฒ๋ง์ ๋์์ผ๋ก ํ๋๋ฐ, ๊ทธ ์ด์ ๋ ์์ชฝ ์ํ ๊ทธ๋ํ์์ ๋ณผ ์ ์๋ฏ, ์ธํ ์ x86๊ธฐ๋ฐ CPU์ ์ ์ ์จ์ด ์๋์ ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ํด์ ์ง๊ธ์ ๊ฐ์ฅ ๋ฒ์ฉ์ ์ธ x64์ํคํ ์ฒ๋ฅผ ๋์์ผ๋ก ์์คํ ํดํน๋ค๋ฃฐ ์์ ์ด๋ฉฐ, ๋ค๋ฅธ ์ํคํ ์ฒ๋ ์ฌํ ์ปค๋ฆฌํ๋ผ์์ ๋ค๋ฃจ๊ฒ ์ต๋๋ค.
x86-64 ์ํคํ ์ฒ
์ธํ ์ 32๋นํธ CPU ์ํคํ ์ฒ์ธ IA-32๋ฅผ 64๋นํธ ํ๊ฒฝ์์ ์ฌ์ฉํ ์ ์๋๋ก ํ์ฅํ ๊ฒ
‘64๋นํธ ์ํคํ ์ฒ', '32๋นํธ ์ํคํ ์ฒ’์์ 64์ 32๋ CPU๊ฐ ํ๋ฒ์ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ์ ๋๋ค.
์ปดํจํฐ ๊ณผํ์์๋ ์ด๋ฅผ CPU๊ฐ ์ดํดํ ์ ์๋ ๋ฐ์ดํฐ์ ๋จ์๋ผ๋ ์๋ฏธ์์ WORD๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
๐กWORD๊ฐ ํฌ๋ฉด ์ ๋ฆฌํ ์ :๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ CPU๊ฐ ํ๋ก์ธ์ค์๊ฒ ์ ๊ณตํ๋ ๊ฐ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ธ๋ฐ,
64๋นํธ ์ํคํ ์ฒ์์๋ ์ด๋ก ์ 16์์ฌ ๋ฐ์ดํธ(=16,777,216 ํ ๋ผ๋ฐ์ดํธ)์ ๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ฉฐ,
์ด๋ ์ฌ๋งํด์๋ ์์ ํ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ ์ ๋๋ก ํฐ ํฌ๊ธฐ์ด๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ณ ๋ก ์์ ๋ฌธ์ ํด๊ฒฐ!
x86-64 ์ํคํ ์ฒ: ๋ ์ง์คํฐ
๋ ์ง์คํฐ๋ CPU๊ฐ ๋ฐ์ดํฐ๋ฅผ ๋น ๋ฅด๊ฒ ์ ์ฅํ๊ณ ์ฌ์ฉํ ๋ ์ด์ฉํ๋ ๋ณด๊ด์๋ก ๋ค์ํ ๋ฐฉ๋ฉด์ผ๋ก ์ฌ์ฉ๋จ
- x64 ์ํคํ
์ฒ: ๋ ์ง์คํฐ
- ๋ฒ์ฉ ๋ ์ง์คํฐ(General Register)
- ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ(Segment Register)
- ๋ช ๋ น์ด ํฌ์ธํฐ ๋ ์ง์คํฐ(Instruction Pointer Register, IP)
- ํ๋๊ทธ ๋ ์ง์คํฐ(Flag Register)
๋ฒ์ฉ ๋ ์ง์คํฐ ๐งบ
๋ฒ์ฉ ๋ ์ง์คํฐ๋ ์ฃผ์ฉ๋๋ ์์ผ๋, ๊ทธ ์ธ์ ๋ค์ํ ์ฉ๋๋ก ์ฌ์ฉ๋ ์ ์๋ ๋ ์ง์คํฐ
์์ฃผ ์ฐ์ด๋ ๋ฒ์ฉ ๋ ์ง์คํฐ๋ค์ ์ฃผ์ฉ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด ์ธ์๋ x64์๋ r8, r9, … , r15๊น์ง์ ๋ฒ์ฉ๋ ์ง์คํฐ๊ฐ ๋ ์กด์ฌํฉ๋๋ค.
rax (accumulator register) | ํจ์์ ๋ฐํ ๊ฐ |
rbx (base register) | x64์์๋ ์ฃผ๋ ์ฉ๋ ์์ |
rcx (counter register) | ๋ฐ๋ณต๋ฌธ์ ๋ฐ๋ณต ํ์, ๊ฐ์ข ์ฐ์ฐ์ ์ํ ํ์ |
rdx (data register) | x64์์๋ ์ฃผ๋ ์ฉ๋ ์์ |
rsi (source index) | ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธธ ๋ ์๋ณธ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ |
rdi (destination index) | ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธธ ๋ ๋ชฉ์ ์ง๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ |
rsp (stack pointer) | ์ฌ์ฉ์ค์ธ ์คํ์ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ |
rbp (stack base pointer) | ์คํ์ ๋ฐ๋ฅ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ |
์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ ๐๏ธ
x64 ์ํคํ ์ฒ์๋ cs, ss, ds, es, fs, gs ์ด 6๊ฐ์ง ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ๊ฐ ์กด์ฌ
- CS ๋ ์ง์คํฐ
- CS๋ ์ง์คํฐ๋ ํ๋ก๊ทธ๋จ์ ์ฝ๋ ์ธ๊ทธ๋จผํธ์ ์์ ์ฃผ์๋ฅผ ํฌํจํ๋ค.
- ์ธ๊ทธ๋จผํธ ์ฃผ์์ ๋ช ๋ น์ด ํฌ์ธํฐ(instruction pointer, IP) ๋ ์ง์คํฐ์ ์คํ์ ๊ฐ์ ๋ํ๋ฉด,
์คํํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ๋ก๋ถํฐ ๊ฐ์ ธ์์ผ ํ ๋ช ๋ น์ด์ ์ฃผ์์ ๋๋ค.
- CS๋ ์ง์คํฐ๋ ํ๋ก๊ทธ๋จ์ ์ฝ๋ ์ธ๊ทธ๋จผํธ์ ์์ ์ฃผ์๋ฅผ ํฌํจํ๋ค.
- DS ๋ ์ง์คํฐ
- DS ๋ ์ง์คํฐ๋ ํ๋ก๊ทธ๋จ์ ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ์ ์์ ์ฃผ์๋ฅผ ํฌํจํฉ๋๋ค.
- ๋ช ๋ น์ด๋ ์ด ์ฃผ์๋ฅผ ์ฌ์ฉํ์ฌ ํ ์ดํฐ์ ์์น๋ฅผ ํ์ธํ๋ค
- DS ๋ ์ง์คํฐ๋ ํ๋ก๊ทธ๋จ์ ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ์ ์์ ์ฃผ์๋ฅผ ํฌํจํฉ๋๋ค.
- SS ๋ ์ง์คํฐ
- SS ๋ ์ง์คํฐ๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์คํ์ ๊ตฌํ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
- ํ๋ก๊ทธ๋จ์ ์ฃผ์์ ๋ฐ์ดํฐ์ ์์ ์ ์ฅ ๋ชฉ์ ์ผ๋ก ์คํ์ ์ฌ์ฉํ๋ค.
- SS ๋ ์ง์คํฐ๋ ๋ฉ๋ชจ๋ฆฌ ์์ ์คํ์ ๊ตฌํ์ ๊ฐ๋ฅํ๊ฒ ํ๋ค.
- ES ๋ ์ง์คํฐ
- CS๋ ์ง์คํฐ๋ ํ๋ก๊ทธ๋จ์ ์ฝ๋ ์ธ๊ทธ๋จผํธ์ ์์ ์ฃผ์๋ฅผ ํฌํจํ๋ค.
- ํ๋ก๊ทธ๋จ์ด ES ๋ ์ง์คํฐ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ์, ์ด ๋ ์ง์คํฐ๋ฅผ ์ ์ ํ ์ธ๊ทธ๋จผํธ ์ฃผ์๋ก ์ด๊ธฐํํด์ผ ํ๋ค
- CS๋ ์ง์คํฐ๋ ํ๋ก๊ทธ๋จ์ ์ฝ๋ ์ธ๊ทธ๋จผํธ์ ์์ ์ฃผ์๋ฅผ ํฌํจํ๋ค.
- FS์ GS ๋ ์ง์คํฐ
- ๊ธฐ์ต์ฅ์น ์๊ตฌ์ฌํญ์ ๋ค๋ฃจ๊ธฐ ์ํด ์ถ๊ฐ๋ก ๋์ ๋ ์ฌ๋ถ์ ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ์ ๋๋ค.
ํ๋์ x64์์ cs, ds, ss ๋ ์ง์คํฐ๋ ์ฝ๋ ์์ญ๊ณผ ๋ฐ์ดํฐ, ์คํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ๋ฆฌํฌ ๋ ์ฌ์ฉ๋๊ณ ,
๋๋จธ์ง ๋ ์ง์คํฐ๋ ์ด์์ฒด์ ๋ณ๋ก ์ฉ๋๋ฅผ ๊ฒฐ์ ํ ์ ์๋๋ก ๋ฒ์ฉ์ ์ธ ์ฉ๋๋ก ์ ์๋ ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ์ ๋๋ค.
๋ช ๋ น์ด ํฌ์ธํฐ ๋ ์ง์คํฐ ๐
CPU๊ฐ ์ด๋ ๋ถ๋ถ์ ์ฝ๋๋ฅผ ์คํํ ์ง ๊ฐ๋ฆฌํค๋๊ฒ ๋ช ๋ น์ด ํฌ์ธํฐ ๋ ์ง์คํฐ์ ์ญํ
x64 ์ํคํ ์ฒ์ ๋ช ๋ น์ด ๋ ์ง์คํฐ๋ rip์ด๋ฉฐ, ํฌ๊ธฐ๋ 8๋ฐ์ดํธ์ ๋๋ค.
ํ๋๊ทธ ๋ ์ง์คํฐ ๐ณ๏ธ๐ด
ํ๋ก์ธ์์ ํ์ฌ ์ํ๋ฅผ ์ ์ฅํ๊ณ ์๋ ๋ ์ง์คํฐ
ํ๋๊ทธ ๋ ์ง์คํฐ๋ ์์ ์ ๊ตฌ์ฑํ๋ ์ฌ๋ฌ ๋นํธ๋ค๋ก CPU์ ํ์ฌ ์ํ๋ฅผ ํํํฉ๋๋ค.
RFLAGS๋ 64๋นํธ์ด๋ฏ๋ก ์ต๋ 64๊ฐ์ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง, ์ค์ ๋ก๋ ์ค๋ฅธ์ชฝ์ 20์ฌ๊ฐ์ ๋นํธ๋ง ์ฌ์ฉํจ
๊ทธ๋ฆฌ๊ณ ๊ทธ ์ค์์๋ ์ฌ๋ฌ๋ถ์ด ์์ผ๋ก ์ฃผ๋ก ์ ํ๊ฒ ๋ ๊ฒ๋ค์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
ํ๋๊ทธ์๋ฏธ
CF(Carry Flag) | ๋ถํธ ์๋ ์์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋นํธ์ ๋ฒ์๋ฅผ ๋์ ๊ฒฝ์ฐ ์ค์ ๋ฉ๋๋ค. |
ZF(Zero Flag) | ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ 0์ผ ๊ฒฝ์ฐ ์ค์ ๋ฉ๋๋ค. |
SF(Sign Flag) | ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ ์์์ผ ๊ฒฝ์ฐ ์ค์ ๋ฉ๋๋ค. |
OF(Overflow Flag) | ๋ถํธ ์๋ ์์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋นํธ ๋ฒ์๋ฅผ ๋์ ๊ฒฝ์ฐ ์ค์ ๋ฉ๋๋ค. |
์์๋ก 3์ ๊ฐ์ ๊ฐ๋ a์ 5์ ๊ฐ์ ๊ฐ๋ b๊ฐ ์์ ๋, a์์ b๋ฅผ ๋นผ๋ ์ฐ์ฐ์ ํ๋ฉด, ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ ์์์ด๋ฏ๋ก
SF๊ฐ ์ค์ ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฉด CPU๋ SF๋ฅผ ํตํด a๊ฐ b๋ณด๋ค ์์์์ ์ ์ ์์ต๋๋ค.
๋ ์ง์คํฐ ํธํ
์์์ x86-64 ์ํคํ ์ฒ๋ IA-32์ 64๋นํธ ํ์ฅ ์ํคํ ์ฒ์ด๋ฉฐ, ํธํ์ด ๊ฐ๋ฅ
IA-32์์ CPU์ ๋ ์ง์คํฐ๋ค์ 32๋นํธ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง๋ฉฐ, ์ด๋ค์ ๋ช ์นญ์ ๊ฐ๊ฐ eax, ebx, ecx, edx, esi, edi, esp, ebp์ด์๋ง,ํธํ์ฑ์ ์ํด ์ด ๋ ์ง์คํฐ๋ค์ x86-64์์๋ ๊ทธ๋๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
rax, rbx, rcx, rdx, rsi, rdi, rsp, rbp๊ฐ ์ด๋ค์ ํ์ฅ๋ ํํ์ด๋ฉฐ, eax, ebx ๋ฑ์ ํ์ฅ๋ ๋ ์ง์คํฐ์
ํ์ 32๋นํธ๋ฅผ ๊ฐ๋ฅดํต๋๋ค. ์๋ฅผ ๋ค์ด, eax๋ rax์ ํ์ 32๋นํธ๋ฅผ ์๋ฏธํฉ๋๋ค.
๋ํ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ณผ๊ฑฐ 16๋นํธ ์ํคํ ์ฒ์ธ IA-16๊ณผ์ ํธํ์ ์ํด ax, bx, cx, dx, si, di, sp, bp๋ eax, ebx, ecx, edx, esi, edi, esp ,ebp์ ํ์ 16๋นํธ๋ฅผ ๊ฐ๋ฅดํต๋๋ค.
๊ฒฐ๋ก
- ๋ฒ์ฉ ๋ ์ง์คํฐ(General Register): ์ฃผ ์ฉ๋๋ ์์ผ๋, ๊ทธ ์ธ์ ์ฉ๋๋ก๋ ์์ ๋กญ๊ฒ ์ฌ์ฉํ ์ ์๋ ๋ ์ง์คํฐ.
x64์๋ rax, rbx, rcx, rdx, rsi, rdi, rsp, rbp, r8-r15๊ฐ ์๋ค. - ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ(Segment Register): ๊ณผ๊ฑฐ์๋ ๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋ฉํ
์ด์
์ด๋, ๊ฐ์ฉ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ์ฅ์ ์ํด
์ฌ์ฉ๋์ผ๋, ํ์ฌ๋ ์ฃผ๋ก ๋ฉ๋ชจ๋ฆฌ ๋ณดํธ๋ฅผ ์ํด ์ฌ์ฉ๋๋ ๋ ์ง์คํฐ x64์๋ cs, ss, ds, es, fs, gs๊ฐ ์๋ค. - ํ๋๊ทธ ๋ ์ง์คํฐ(Flag Register): CPU์ ์ํ๋ฅผ ์ ์ฅํ๋ ๋ ์ง์คํฐ
- ๋ช
๋ น์ด ํฌ์ธํฐ ๋ ์ง์คํฐ(Instruction Pointer Register, IP): CPU๊ฐ ์คํํด์ผํ ์ฝ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ ์ง์คํฐ.
x64์์๋ rip๊ฐ ์๋ค.
์ฐธ๊ณ ์๋ฃ(๋จ, ์ ๋ถ๋ถ์ ์ ๊ฐ ๋ฐฐ์ด ๋ด์ฉ ์์ฝ์ ๊ฐ๊น๊ธฐ ๋๋ฌธ์ ๊ฑฐ์ ์ ๋ด์ฉ๊ณผ ๊ฐ์ต๋๋ค.)
์ฐธ๊ณ ์ด๋ฏธ์ง
'๐โSystem_Study > ๐โDreamhack_Hacking' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Tool: pwntools (4) | 2022.04.04 |
---|---|
Tool: gdb (0) | 2022.03.29 |
Quiz: x86 Assembly (0) | 2022.03.27 |
x86 Assembly: Essential Part (0) | 2022.03.24 |
Linux Memory Layout (0) | 2022.03.21 |