
1. ์ปดํจํฐ ๊ตฌ์กฐ์ ๋ช ๋ น์ด ์งํฉ ๊ตฌ์กฐ
์ปดํจํฐ ๊ตฌ์กฐ ๐ป
์ปดํจํฐ ๊ตฌ์กฐ(Computer Architecture)
: ์ปดํจํฐ๊ฐ ํจ์จ์ ์ผ๋ก ์๋ํ ์ ์๋๋ก ํ๋์จ์ด ๋ฐ ์ํํธ์จ์ด์ ๊ธฐ๋ฅ์ ๊ณ ์ํ๊ณ , ์ด๋ค์ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ
โท ์ปดํจํฐ์ ๊ธฐ๋ฅ ๊ตฌ์กฐ์ ๋ํ ์ค๊ณ, ๋ช ๋ น์ด ์งํฉ๊ตฌ์กฐ, ๋ง์ดํฌ๋ก ์ํคํ ์ฒ, ๊ทธ๋ฆฌ๊ณ ๊ธฐํ ํ๋์จ์ด ๋ฐ ์ปดํจํ ๋ฐฉ๋ฒ์ ๋ํ ์ค๊ณ ๋ฑ์ด ํฌํจ๋จ
์ปดํจํฐ์ ๊ธฐ๋ฅ ๋ฐ ์ค๊ณ
: ์ปดํจํฐ๊ฐ ์ฐ์ฐ์ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํด ์ด๋ค ๊ธฐ๋ฅ๋ค์ด ์ปดํจํฐ์ ํ์ํ์ง ๊ณ ๋ฏผํ๊ณ , ์ค๊ณํ๋ ๋ถ์ผ
- ํฐ ๋ ธ์ด๋ง ๊ตฌ์กฐ
- ํ๋ฒ๋ ๊ตฌ์กฐ
- ์์ ๋ ํ๋ฒ๋ ๊ตฌ์กฐ
๋ช ๋ น์ด ์งํฉ๊ตฌ์กฐ (Instruction Set Architecture)
: CPU์ ๋ช ๋ น์ด์ ๋ํ ์ค๊ณ
- x86, x86-64
- ARM
- MIPS
- AVR
๋ง์ดํฌ๋ก ์ํคํ ์ฒ (Micro Architecture)
: CPU์ ํ๋์จ์ด์ ์ค๊ณ
- ์บ์ ์ค๊ณ
- ํ์ดํ๋ผ์ด๋
- ์ํผ ์ค์นผ๋ผ
- ๋ถ๊ธฐ ์์ธก
- ๋น์์ฐจ์ ๋ช ๋ น์ด ์ฒ๋ฆฌ
ํฐ ๋ ธ์ด๋ง ๊ตฌ์กฐ
ํฐ ๋ ธ์ด๋ง
โถ ์ปดํจํฐ์ ์ฐ์ฐ, ์ ์ด, ์ ์ฅ์ ์ธ ๊ฐ์ง ํต์ฌ ๊ธฐ๋ฅ์ด ํ์ํ๋ค ์๊ฐํจ
* ๊ทผ๋์ ์ปดํจํฐ
- ์ฐ์ฐ๊ณผ ์ ์ด -> ์ค์์ฒ๋ฆฌ์ฅ์น (Central Processing Unit, CPU)
- ์ ์ฅ -> ๊ธฐ์ต์ฅ์น (memory)
- ์ฅ์น ๊ฐ ๋ฐ์ดํฐ๋ ์ ์ด ์ ํธ ๊ตํ -> ๋ฒ์ค(bus)
์ค์์ฒ๋ฆฌ์ฅ์น(CPU) ๐ง
- ํ๋ก๊ทธ๋จ์ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๊ณ ์์คํ ์ ์ ์ดํ๋ ์ปดํจํฐ์ ๋๋
- ํ๋ก์ธ์ค์ ์ฝ๋๋ฅผ ๋ถ๋ฌ์ค๊ณ , ์คํํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ์ผ๋ จ์ ๋ชจ๋ ๊ณผ์ ์ด CPU์์ ์ผ์ด๋จ
- CPU๋ ์ฐ์ ๋ ผ๋ฆฌ์ฅ์น, ์ ์ด์ฅ์น, ๋ ์ง์คํฐ ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋๋ค
๊ธฐ์ต์ฅ์น ๐พ
- ์ปดํจํฐ๊ฐ ๋์ํ๋๋ฐ ํ์ํ ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค
- ์ฉ๋์ ๋ฐ๋ผ ์ฃผ๊ธฐ์ต์ฅ์น, ๋ณด์กฐ๊ธฐ์ต์ฅ์น๋ก ๋ถ๋ฅ๋๋ค
- ์ฃผ๊ธฐ์ต์ฅ์น → ๋ฐ์ดํฐ ์์ ์ ์ฅ - ex) ๋จ (Random-Access Memory, RAM)
- ๋ณด์กฐ๊ธฐ์ต์ฅ์น → ๋ฐ์ดํฐ ์ฅ๊ธฐ๊ฐ ๋ณด๊ด - ex) ํ๋ ๋๋ผ์ด๋ธ (Hard Disk Drive, HDD), SSD (Solid State Drive)
๋ฒ์ค ๐
- ์ปดํจํฐ์ ์ปดํจํฐ ์ฌ์ด์ ์ ํธ๋ฅผ ์ ์กํ๋ ํต๋ก
- ๋ฐ์ดํฐ ๋ฒ์ค (Data Bus) - ๋ฐ์ดํฐ ์ด๋
- ์ฃผ์ ๋ฒ์ค (Address Bus) - ์ฃผ์ ์ง์
- ์ ์ด ๋ฒ์ค (Control Bus) - ์ฝ๊ธฐ/์ฐ๊ธฐ ์ ์ด
- ์ด์ธ์๋ ๋์ ์ด๋ ๋ฐ์ดํฐ ์ ์ก์ ๋ชฉ์ ์ผ๋ก ํ๋ ์ํํธ์จ์ด, ํ๋กํ ์ฝ ๋ฑ๋ ๋ฒ์ค๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋ช ๋ น์ด ์งํฉ ๊ตฌ์กฐ (Instruction Set Architecture, ISA)
: CPU๊ฐ ํด์ํ๋ ๋ช ๋ น์ด์ ์งํฉ
ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด ์ด ๋ช ๋ น์ด๋ค์ CPU๊ฐ ์ฝ๊ณ ์ฒ๋ฆฌํ๋ค.
ISA๋ IA-32, x86-64(x64), MIPS, AVR ๋ฑ ๋ค์ํ๊ฒ ์กด์ฌํ๋ค.
-> ๋ชจ๋ ์ปดํจํฐ๊ฐ ๋์ผํ ์์ค์ ์ฐ์ฐ ๋ฅ๋ ฅ์ ์๊ตฌํ์ง ์์ผ๋ฉฐ, ์ปดํจํ ํ๊ฒฝ๋ ๋ค์ํ๊ธฐ ๋๋ฌธ
๋ง์ ์ํคํ ์ฒ ์ค์์ ์ด ์ปค๋ฆฌํ๋ผ์ x86-64 ์ํคํ ์ฒ๋ง์ ๋์์ผ๋ก ํจ
โท ์ธํ ์ x86๊ธฐ๋ฐ CPU์ ์ ์ ์จ์ด ์๋์ ์ด๊ธฐ ๋๋ฌธ
2. x86-64 ์ํคํ ์ฒ
x86-64 ์ํคํ ์ฒ
โ x64 ์ํคํ ์ฒ : ์ธํ ์ 64๋นํธ CPU ์ํคํ ์ฒ
โ ๋๋ค์์ ๊ฐ์ธ์ฉ ์ปดํจํฐ๋ค์ด ์ธํ ์ x64 CPU๋ฅผ ์ฌ์ฉํ๊ณ ์๋ค.
n ๋นํธ ์ํคํ ์ฒ
- n๋นํธ ์ํคํ
์ฒ์์ n์ CPU๊ฐ ํ๋ฒ์ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ
- ์ปดํจํฐ๊ณผํ์์๋ ์ด๋ฅผ CPU๊ฐ ์ดํดํ ์ ์๋ ๋ฐ์ดํฐ์ ๋จ์๋ผ๋ ์๋ฏธ์์ WORD๋ผ๊ณ ๋ถ๋ฆ
- WORD์ ํฌ๊ธฐ๋ CPU๊ฐ ์ด๋ป๊ฒ ์ค๊ณ๋์ผ๋์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋ค
- ex) ์ผ๋ฐ์ ์ธ 32๋นํธ ์ํคํ ์ฒ์์ ALU๋ ํ ๋ฒ์ 32๋นํธ ํฌ๊ธฐ์ ๊ฐ์ ์ฐ์ฐํ ์ ์๊ณ , ๋ ์ง์คํฐ์ ์ฉ๋ ๋ฐ ๊ฐ์ข ๋ฒ์ค๋ค์ ๋์ญํญ์ด 32๋นํธ ํฌ๊ธฐ๋ฅผ ๊ฐ๋๋ค --> ์ด๋ค๋ก ๊ตฌ์ฑ๋ CPU๋ ์ค๊ณ ์ 32๋นํธ์ ๋ฐ์ดํฐ๊น์ง๋ง ์ฒ๋ฆฌํ ์ ์๊ฒ ๋๋ค.
WORD๊ฐ ํฌ๋ฉด ์ ๋ฆฌํ ์
- 64๋นํธ ์ํคํ
์ฒ์์๋ ์ด๋ก ์ 16์์ฌ ๋ฐ์ดํธ(=16,777,216ํ
๋ผ๋ฐ์ดํธ)์ ๊ฐ์๋ฉ๋ชจ๋ฆฌ ์ ๊ณต
- ์ด ์ฉ๋์ ์์ ํ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ ์ ๋๋ก ํฐ ํฌ๊ธฐ์
- ๊ฐ์ฉํ ๋ฉ๋ชจ๋ฆฌ ์์์ด ๋ถ์กฑํด์ ์ํํธ์จ์ด์ ์ต๊ณ ์ฑ๋ฅ์ ๋ผ ์ ์๋ค๊ฑฐ๋ ์ํํธ์จ์ด์ ์คํ์ด ๋ถ๊ฐ๋ฅํ ์ํฉ์ ๊ฑฐ์ ๋ฐ์ํ์ง ์๋๋ค.
x86-64 ์ํคํ ์ฒ: ๋ ์ง์คํฐ
โ ๋ ์ง์คํฐ : CPU ๋ด๋ถ์ ์ ์ฅ์ฅ์น
- ์ฐ์ ์ฐ์ฐ์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ฑฐ๋ ์ฃผ์๋ฅผ ์ ์ฅํ๊ณ ์ฐธ์กฐํ๋ ๋ฑ ๋ค์ํ ์ฉ๋๋ก ์ฌ์ฉ๋จ
- ๋ฒ์ฉ ๋ ์ง์คํฐ(General Register), ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ(Segment Register), ๋ช ๋ น์ด ํฌ์ธํฐ ๋ ์ง์คํฐ(Instruction Pointer Register, IP), ๊ทธ๋ฆฌ๊ณ ํ๋๊ทธ ๋ ์ง์คํฐ(Flag Register)๊ฐ ์กด์ฌํ๋ค
๋ฒ์ฉ ๋ ์ง์คํฐ ๐งบ
์ด๋ฆ | ์ฃผ์ฉ๋ |
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) | ์คํ์ ๋ฐ๋ฅ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ |
์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ ๐
โ x86-64 ์ํคํ ์ฒ์๋ cs, ss, ds, es, fs, gs ์ด 6๊ฐ์ง ์ธ๊ทธ๋จผํธ
- ๊ฐ ๋ ์ง์คํฐ์ ํฌ๊ธฐ๋ 16๋นํธ์ด๋ค.
- ๊ณผ๊ฑฐ IA-32, IA-16์์๋ ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ๋ฅผ ์ด์ฉํ์ฌ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋ฅผ ํค์ฐ๋ ค๊ณ ํ๋ค.
- ๋น์์๋ ๋ฒ์ฉ ๋ ์ง์คํฐ์ ํฌ๊ธฐ๊ฐ ์์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์ ํญ์ด ์ข์์ง๋ง, x64์์๋ ์ฌ์ฉ ๊ฐ๋ฅํ ์ฃผ์ ์์ญ์ด ๊ต์ฅํ ๋๊ธฐ ๋๋ฌธ์ ์ด๋ฐ ์ฉ๋๋ก๋ ๊ฑฐ์ ์ฌ์ฉ๋์ง ์๋๋ค.
โก ํ๋์ x64์์ cs, ds, ss ๋ ์ง์คํฐ๋ ์ฝ๋ ์์ญ๊ณผ ๋ฐ์ดํฐ, ์คํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ๋ฆฌํฌ ๋ ์ฌ์ฉ๋๊ณ , ๋๋จธ์ง ๋ ์ง์คํฐ๋ ์ด์์ฒด์ ๋ณ๋ก ์ฉ๋๋ฅผ ๊ฒฐ์ ํ ์ ์๋๋ก ๋ฒ์ฉ์ ์ธ ์ฉ๋๋ก ์ ์๋ ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ์ด๋ค.
๋ช ๋ น์ด ํฌ์ธํฐ ๋ ์ง์คํฐ๐
โ ํ๋ก๊ทธ๋จ์ ์ฝ๋๋ ๊ธฐ๊ณ์ด๋ก ์์ฑ๋จ
- CPU๊ฐ ์ด๋ ๋ถ๋ถ์ ์ฝ๋๋ฅผ ์คํํ ์ง ๊ฐ๋ฆฌํค๋๊ฒ ๋ช ๋ น์ด ํฌ์ธํฐ ๋ ์ง์คํฐ์ ์ญํ
- x64 ์ํคํ ์ฒ์ ๋ช ๋ น์ด ๋ ์ง์คํฐ๋ rip์ด๋ฉฐ, ํฌ๊ธฐ๋ 8๋ฐ์ดํธ์ด๋ค.
ํ๋๊ทธ ๋ ์ง์คํฐ ๐ณ๏ธ๐ด
โ ํ๋๊ทธ ๋ ์ง์คํฐ๋ ํ๋ก์ธ์์ ํ์ฌ ์ํ๋ฅผ ์ ์ฅํ๊ณ ์๋ ๋ ์ง์คํฐ์ด๋ค.
- x64 ์ํคํ ์ฒ์์๋ RFLAGS๋ผ๊ณ ๋ถ๋ฆฌ๋ 64๋นํธ ํฌ๊ธฐ์ ํ๋๊ทธ ๋ ์ง์คํฐ๊ฐ ์กด์ฌํ๋ฉฐ, ๊ณผ๊ฑฐ 16๋นํธ ํ๋๊ทธ ๋ ์ง์คํฐ๊ฐ ํ์ฅ๋ ๊ฒ์ด๋ค.
- ๊น๋ฐ์ ์ฌ๋ฆฌ๊ณ , ๋ด๋ฆฌ๋ ํ์๋ก ์ ํธ๋ฅผ ์ ๋ฌํ๋ฏ, ํ๋๊ทธ ๋ ์ง์คํฐ๋ ์์ ์ ๊ตฌ์ฑํ๋ ์ฌ๋ฌ ๋นํธ๋ค๋ก CPU์ ํ์ฌ ์ํ๋ฅผ ํํํ๋ค.
ํ๋๊ทธ | ์๋ฏธ |
CF(Carry Flag) | ๋ถํธ ์๋ ์์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋นํธ์ ๋ฒ์๋ฅผ ๋์ ๊ฒฝ์ฐ ์ค์ ๋ฉ๋๋ค. |
ZF(Zero Flag) | ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ 0์ผ ๊ฒฝ์ฐ ์ค์ ๋ฉ๋๋ค. |
SF(Sign Flag) | ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ ์์์ผ ๊ฒฝ์ฐ ์ค์ ๋ฉ๋๋ค. |
OF(Overflow Flag) | ๋ถํธ ์๋ ์์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋นํธ ๋ฒ์๋ฅผ ๋์ ๊ฒฝ์ฐ ์ค์ ๋ฉ๋๋ค. |
๋ ์ง์คํฐ ํธํ
โ x86-64 ์ํคํ ์ฒ๋ IA-32์ 64๋นํธ ํ์ฅ ์ํคํ ์ฒ์ด๋ฉฐ, ํธํ์ด ๊ฐ๋ฅํ๋ค.
โ IA-32 CPU์ ๋ ์ง์คํฐ๋ค์ ๋ช ์นญ์ธ eax, ebx, ecx, edx, esi, edi, esp, ebp ๋ ํธํ์ฑ์ ์ํด
x86-64์์๋ ๊ทธ๋๋ก ์ฌ์ฉ์ด ๊ฐ๋ฅํ๋ค.
rax, rbx, rcx, rdx, rsi, rdi, rsp, rbp๊ฐ ํ์ฅ๋ ํํ์ด๋ฉฐ, eax, ebx ๋ฑ์ ํ์ฅ๋ ๋ ์ง์คํฐ์ ํ์ 32๋นํธ๋ฅผ ๊ฐ๋ฅดํจ๋ค.
์๋ฅผ ๋ค์ด, eax๋ rax์ ํ์ 32๋นํธ๋ฅผ ์๋ฏธํ๋ค.
๋ค์ ๊ทธ๋ฆผ์ ์ฐธ๊ณ ํ์.
๋ฆฌ๋ทฐ ํด์ฆโ
Quiz: Computer Architecture
eax๋ rax์ ํ์ 32๋นํธ
์์ ๊ทธ๋ฆผ์ ์ฐธ๊ณ ํ๋ค. (x86-64์ ๋ ์ง์คํฐ)
ํ๋๊ทธ ๋ ์ง์คํฐ )
์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ 0์ผ ๊ฒฝ์ฐ ZF ์ค์ ๋จ
'DreamHack > Reversing (Dreamhack)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Reversing] 3์ฃผ์ฐจ dreamhack stage 3 (0) | 2022.05.08 |
---|---|
[Reversing] 2์ฃผ์ฐจ_dreamhack stage 3 - (1) (0) | 2022.04.30 |
[System Hacking] 1์ฃผ์ฐจ dreamhack stage 2 - (1) (0) | 2022.04.07 |
[Reversing] 1์ฃผ์ฐจ dreamhack stage 2 (0) | 2022.04.07 |
[Reversing] 1์ฃผ์ฐจ dreamhack stage 1 (0) | 2022.04.07 |