1. ์ปดํจํฐ ๊ตฌ์กฐ์ ๋ช ๋ น์ด ์งํฉ ๊ตฌ์กฐ
1.1 ์ปดํจํฐ ๊ตฌ์กฐ
์ปดํจํฐ ๊ตฌ์กฐ์ ์ธ๋ถ ๋ถ์ผ
|
1.2. ํฐ ๋ ธ์ด๋ง ๊ตฌ์กฐ
ํฐ ๋ ธ์ด๋ง์ ์ปดํจํฐ์ ์ธ ๊ฐ์ง ํต์ฌ ๊ธฐ๋ฅ์ด ํ์ํ๋ค๊ณ ์๊ฐํ์ต๋๋ค.
- ์ฐ์ฐ๊ณผ ์ ์ด โก๏ธ ์ค์์ฒ๋ฆฌ์ฅ์น(Central Processing Unit, CPU)
- ์ ์ฅ โก๏ธ ๊ธฐ์ต์ฅ์น(memory)
- ์ฅ์น ๊ฐ ๋ฐ์ดํฐ/์ ์ด ์ ํธ ๊ตํ โก๏ธ๋ฒ์ค(bus)

1.2.1. ์ค์์ฒ๋ฆฌ์ฅ์น๐ง
CPU์ ์ญํ
ํ๋ก๊ทธ๋จ์ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๊ณ ์์คํ ์ ๊ด๋ฆฌํ๋ ์ปดํจํฐ์ ๋๋์ ๋๋ค. ํ๋ก์ธ์ค์ ์ฝ๋๋ฅผ ๋ถ๋ฌ์ค๊ณ , ์คํํ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํ๋ ์ผ๋ จ์ ๋ชจ๋ ๊ณผ์ ์ด CPU์์ ์ผ์ด๋ฉ๋๋ค.
CPU์ ๊ตฌ์ฑ
- ์ฐ์ ๋ ผ๋ฆฌ์ฅ์น(Arithmetic Logic Unit, ALU) : ์ฐ์ /๋ ผ๋ฆฌ ์ฐ์ฐ์ ์ฒ๋ฆฌ
- ์ ์ด์ฅ์น(Control Unit) : CPU๋ฅผ ์ ์ด
- ๋ ์ง์คํฐ(Register) : CPU์ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
- etc
1.2.2. ๊ธฐ์ต์ฅ์น๐พ
์ฉ๋์ ๋ฐ๋ฅธ ๋ฉ๋ชจ๋ฆฌ์ ๋ถ๋ฅ
- ์ฃผ๊ธฐ์ต์ฅ์น : ํ๋ก๊ทธ๋จ ์คํ๊ณผ์ ์์ ํ์ํ ๋ฐ์ดํฐ๋ค์ ์์๋ก ์ ์ฅํ๊ธฐ ์ํด ์ฌ์ฉ
- ๋จ(Random-Access Memory, RAM) - ๋ณด์กฐ๊ธฐ์ต์ฅ์น : ์ด์ ์ฒด์ , ํ๋ก๊ทธ๋จ ๋ฑ๊ณผ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฅ๊ธฐ๊ฐ ๋ณด๊ดํ๊ณ ์ ํ ๋ ์ฌ์ฉ
- ํ๋ ๋๋ผ์ด๋ธ(Hard Disk Drive, HDD), SSD(Solid State Drive)
1.2.3. ๋ฒ์ค๐
์ปดํจํฐ ๋ถํ๊ณผ ๋ถํ ์ฌ์ด ๋๋ ์ปดํจํฐ์ ์ปดํจํฐ ์ฌ์ด์ ์ ํธ๋ฅผ ์ ์กํ๋ ํต๋ก๋ฅผ ๋งํฉ๋๋ค.
๋ฒ์ค์ ์ข ๋ฅ
- ๋ฐ์ดํฐ๊ฐ ์ด๋ํ๋ ๋ฐ์ดํฐ ๋ฒ์ค(Data Bus)
- ์ฃผ์๋ฅผ ์ง์ ํ๋ ์ฃผ์ ๋ฒ์ค(Address Bus)
- ์ฝ๊ธฐ/์ฐ๊ธฐ๋ฅผ ์ ์ดํ๋ ์ ์ด ๋ฒ์ค(Control Bus)
- ๋์ ์ด๋ ๋ฐ์ดํฐ ์ ์ก ์ํํธ์จ์ด, ํ๋กํ ์ฝ
๐ก ๊ธฐ์ต์ฅ์น๊ฐ ์๋๋ฐ CPU ์์ ๋ ์ง์คํฐ๊ฐ ์ ํ์ํ๊ฐ์?
CPU์ ์ฐ์ฐ์๋๊ฐ ๊ธฐ์ต์ฅ์น์์ ๋ฐ์ดํฐ ๊ตํ์๋๋ณด๋ค ์๋์ ์ผ๋ก ๋น ๋ฅด๊ธฐ ๋๋ฌธ์, ๊ธฐ์ต์ฅ์น๋ง์ ์ฌ์ฉํ๋ค๋ฉด ๋ณ๋ชฉํ์์ด ๋ฐ์ํฉ๋๋ค. ๋ฐ๋ผ์ CPU๋ ๊ตํ์๋๋ฅผ ๋จ์ถํ๊ธฐ ์ํด ๋ด๋ถ์ ๋ ์ง์คํฐ์ ์บ์๋ผ๋ ์ ์ฅ์ฅ์น๋ฅผ ๊ฐ๊ณ ์์ต๋๋ค.
1.3. ๋ช ๋ น์ด ์งํฉ ๊ตฌ์กฐ
๋ช
๋ น์ด ์งํฉ ๊ตฌ์กฐ(Instruction Set Architecture, ISA) : CPU๊ฐ ํด์ํ๋ ๋ช
๋ น์ด์ ์งํฉ
ํ๋ก๊ทธ๋จ์ ๊ธฐ๊ณ์ด๋ก ์ด๋ฃจ์ด์ ธ ์๋๋ฐ, ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด ์ด ๋ช
๋ น์ด๋ค์ CPU๊ฐ ์ฝ๊ณ , ์ฒ๋ฆฌํฉ๋๋ค.
๋ช
๋ น์ด ์งํฉ ๊ตฌ์กฐ ์ข
๋ฅ
- IA-32 , x86-64(x64), MIPS, AVR ๋ฑ
์ด๋ ๊ฒ ๋ค์ํ ISA๊ฐ ๊ฐ๋ฐ๋๊ณ ์ฌ์ฉ๋๋ ์ด์ ๋ ๋ชจ๋ ์ปดํจํฐ๊ฐ ๋์ผํ ์์ค์ ์ฐ์ฐ ๋ฅ๋ ฅ์ ์๊ตฌํ์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค.
์๋ฅผ ๋ค์ด, ์ธํ
์ x86-64๋ ๊ณ ์ฑ๋ฅ ํ๋ก์ธ์๋ฅผ ์ค๊ณํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ CPU๋ค์ ๋ง์ ์ ๋ ฅ์ ์๋ชจํ๋ฉฐ, ๋ฐ์ด๋ ์๋์ ์ผ๋ก ์ฌํฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์์ ์ ์ผ๋ก ์ ๋ ฅ์ ๊ณต๊ธํ ์ ์๊ณ , ๋๊ฐ ์ฅ์น๋ฅผ ๊ตฌ๋นํ๋ ๋ฐ ๊ณต๊ฐ์์ ๋ถ๋ด์ด ํฌ์ง ์์ ๋ฐ์คํฌํฑ ๋๋ ๋ฉํฑ์ ์ ํฉํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋๋ก ๊ณผ ๊ฐ์ด ๋ฐฐํฐ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๊ณต์ ๊ธฐ, ์ธ๊ณต์ง๋ฅ ์คํผ์ปค์ฒ๋ผ ํฌ๊ธฐ๊ฐ ์์ ์๋ฒ ๋๋ ๊ธฐ๊ธฐ๋ค์ ์ด๋ฌํ ์ ์ฝ์กฐ๊ฑด์ ํด๊ฒฐํ๊ธฐ ์ด๋ ต์ต๋๋ค. ํนํ ์ค๋งํธํฐ์ ํผ๋ถ์ ๋ฟ๊ธฐ ๋๋ฌธ์ ๋ฐ์ด ๋ฌธ์ ์ ๋ฏผ๊ฐํ๊ณ , ๋ฐฐํฐ๋ฆฌ๋ก ์๋ํ๋ฏ๋ก ์ธํ
์ ๊ณ ์ฑ๋ฅ ํ๋ก์ธ์๋ฅผ ์ฅ์ฐฉํ๊ธฐ ๋งค์ฐ ๋ถ์ ํฉํฉ๋๋ค. ๊ทธ๋์ ๋ง์ ์๋ฒ ๋๋ ์ฅ๋น๋ค์ ์ ๋ ฅ ์๋ชจ์ ๋ฐ์ด์ด ์ ์ ARM์ด๋ MIPS ๋๋ AVR์ ํ๋ก์ธ์๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
3. x86-64 ์ํคํ
์ฒ
๋๋ค์์ ๊ฐ์ธ์ฉ ์ปดํจํฐ๋ค์ด ์ธํ
์ x64 CPU๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. x64 ์ํคํ
์ฒ๋ ์ธํ
์ 64๋นํธ CPU ์ํคํ
์ฒ๋ก, ์ธํ
์ 32๋นํธ CPU ์ํคํ
์ฒ์ธ IA-32๋ฅผ ํ์ฅํ ๊ฒ์
๋๋ค.
n ๋นํธ ์ํคํ
์ฒ
n์ CPU๊ฐ ํ๋ฒ์ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ์
๋๋ค. ์ปดํจํฐ๊ณผํ์์๋ ์ด๋ฅผ CPU๊ฐ ์ดํดํ ์ ์๋ ๋ฐ์ดํฐ์ ๋จ์๋ผ๋ ์๋ฏธ์์ WORD๋ผ๊ณ ๋ถ๋ฆ
๋๋ค.
WORD์ ํฌ๊ธฐ๋ CPU์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๋๋ค. ์๋ฅผ ๋ค์ด, ์ผ๋ฐ์ ์ธ 32๋นํธ ์ํคํ
์ฒ์์ ALU๋ 32๋นํธ๊น์ง ๊ณ์ฐํ ์ ์์ผ๋ฉฐ, ๋ ์ง์คํฐ์ ์ฉ๋ ๋ฐ ๊ฐ์ข
๋ฒ์ค๋ค์ ๋์ญํญ์ด 32๋นํธ์
๋๋ค. ๋ฐ๋ผ์ ์ด๋ค๋ก ๊ตฌ์ฑ๋ CPU๋ ์ค๊ณ ์ 32๋นํธ์ ๋ฐ์ดํฐ๊น์ง๋ง ์ฒ๋ฆฌํ ์ ์๊ฒ ๋ฉ๋๋ค.
WORD๊ฐ ํฌ๋ฉด ์ ๋ฆฌํ ์
- ๊ฐ์๋ฉ๋ชจ๋ฆฌ : CPU๊ฐ ํ๋ก์ธ์ค์๊ฒ ์ ๊ณตํ๋ ๊ฐ์์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
ํ๋์ PC๋ ๋๋ถ๋ถ 64๋นํธ ์ํคํ
์ฒ์ CPU๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๊ทธ ์ด์ ์ค ํ๋๋ 32๋นํธ ์ํคํ
์ฒ์ CPU๊ฐ ์ ๊ณตํ ์ ์๋ ๊ฐ์๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๊ฐ ์๊ธฐ ๋๋ฌธ์
๋๋ค. 32๋นํธ ์ํคํ
์ฒ์์๋ ์ต๋ 4,294,967,296๋ฐ์ดํธ(=4๊ธฐ๊ฐ ๋ฐ์ดํธ) ํฌ๊ธฐ์ ๊ฐ์๋ฉ๋ชจ๋ฆฌ ์ ๊ณต์ด ๊ฐ๋ฅํ๋ฐ, ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์์์ ์๋ชจํ๋ ์ ๋ฌธ ์ํํธ์จ์ด ๋ฑ์ ์คํํ๊ธฐ์ ๋ถ์กฑํฉ๋๋ค.
๋ฐ๋ฉด, 64๋นํธ ์ํคํ
์ฒ์์๋ ์ด๋ก ์ 16์์ฌ ๋ฐ์ดํธ(=16,777,216 ํ
๋ผ๋ฐ์ดํธ)์ ๊ฐ์๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๊ณตํ ์ ์์ต๋๋ค. ์ด๋ ์ฌ๋งํด์๋ ์์ ํ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ ์ ๋๋ก ํฐ ํฌ๊ธฐ์
๋๋ค.
x86-64์ ์ฌ๋ฌ ์ด๋ฆ: Intel64, IA-32e, amd64, EM64T …
๋ณต์กํ ๊ฐ๋ฐ๊ณผ์ ์ ๊ฑฐ์ณค๊ธฐ ๋๋ฌธ์ x86-64๋ ์ฌ๋ฌ ์ด๋ฆ์ ๊ฐ๊ฒ ๋์ต๋๋ค. ์์คํ ํดํน์ ํ๋ค๋ณด๋ฉด amd64๋ผ๋ ๋ช ์นญ์ ์์ฃผ ๋ณผ ์ ์๋๋ฐ, x86-64์ ๊ฐ์ ์ํคํ ์ฒ๋ผ๊ณ ์๊ฐํด๋ ๋ฉ๋๋ค.
3.1. ๋ ์ง์คํฐ
- ๋ฒ์ฉ ๋ ์ง์คํฐ(General Register)
- ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ(Segment Register)
- ๋ช ๋ น์ด ํฌ์ธํฐ ๋ ์ง์คํฐ(Instruction Pointer Register, IP)
- ํ๋๊ทธ ๋ ์ง์คํฐ(Flag Register)
3.1.1. ๋ฒ์ฉ ๋ ์ง์คํฐ
x86-64์์ ๋ฒ์ฉ ๋ ์ง์คํฐ๋ 8๋ฐ์ดํธ๋ฅผ ์ ์ฅํ ์ ์์ผ๋ฉฐ, ๋ถํธ ์๋ ์ ์๋ฅผ ๊ธฐ์ค์ผ๋ก 2^64 - 1๊น์ง์ ์๋ฅผ ๋ํ๋ผ ์ ์์ต๋๋ค. ๋ฒ์ฉ ๋ ์ง์คํฐ๋ค์ ์ฃผ ์ฉ๋๊ฐ ์์ผ๋, ๊ทธ ์ธ์ ์ฉ๋๋ก๋ ์ฌ์ฉ๋ ์ ์์ต๋๋ค.
์์ฃผ ์ฐ์ด๋ ๋ฒ์ฉ ๋ ์ง์คํฐ๋ ์๋์ ๊ฐ์ผ๋ฉฐ, ์ด ์ธ์๋ 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) | ์คํ์ ๋ฐ๋ฅ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ |
3.1.2. ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ
x64 ์ํคํ ์ณ์๋ cs, ss, ds, es, fs, gs ์ด 6๊ฐ์ง์ ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ๊ฐ ์กด์ฌํ๋ฉฐ, ํฌ๊ธฐ๋ 16๋นํธ์ ๋๋ค.
x64 ์ํคํ ์ฒ์์๋ 64๋นํธ ์ฃผ์ ๊ณต๊ฐ์ ์ฌ์ฉํ๋ฏ๋ก ๋งค์ฐ ๋์ ์ฃผ์ ๋ฒ์๋ฅผ ์ง์ํฉ๋๋ค. ๋ฐ๋ผ์ ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ๋ฅผ ์ฃผ์ ํ์ฅ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค๋, ๋ณด๋ค ์ ์ฐํ๊ฒ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ํ ์ ์๊ฒ ๋์์ต๋๋ค.
3.1.3. ๋ช ๋ น์ด ํฌ์ธํฐ ๋ ์ง์คํฐ
x64 ์ํคํ ์ฒ์ ๋ช ๋ น์ด ๋ ์ง์คํฐ๋ rip์ด๋ฉฐ, 8๋ฐ์ดํธ์ ๋๋ค.
๋ช ๋ น์ด ํฌ์ธํฐ ๋ ์ง์คํฐ์ ์ญํ
CPU๊ฐ ์ด๋ ๋ถ๋ถ์ ํ๋ก๊ทธ๋จ ์ฝ๋๋ฅผ ์คํํ ์ง๋ฅผ ๊ฐ๋ฆฌํค๋ ์ญํ
3.1.4. ํ๋๊ทธ ๋ ์ง์คํฐ
ํ๋ก์ธ์์ ํ์ฌ ์ํ๋ฅผ ์ ์ฅํ๊ณ ์๋ ๋ ์ง์คํฐ์ ๋๋ค. ํ๋๊ทธ ๋ ์ง์คํฐ๋ ์์ ์ ๊ตฌ์ฑํ๋ ์ฌ๋ฌ ๋นํธ๋ค๋ก CPU์ ํ์ฌ ์ํ๋ฅผ ํํํฉ๋๋ค.
x64 ์ํคํ ์ฒ์์๋ RFLAGS๋ผ๊ณ ๋ถ๋ฆฌ๋ 64๋นํธ ํฌ๊ธฐ์ ํ๋๊ทธ ๋ ์ง์คํฐ๊ฐ ์กด์ฌํ๋ฉฐ, ๊ณผ๊ฑฐ 16๋นํธ ํ๋๊ทธ ๋ ์ง์คํฐ๊ฐ ํ์ฅ๋ ๊ฒ์ ๋๋ค. RFLAGS๋ 64๋นํธ์ด๋ฏ๋ก ์ต๋ 64๊ฐ์ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง, ์ค์ ๋ก๋ 20์ฌ๊ฐ์ ๋นํธ๋ง ์ฌ์ฉํฉ๋๋ค.
| ํ๋๊ทธ | ์๋ฏธ |
| CF(Carry Flag) | ๋ถํธ ์๋ ์์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋นํธ์ ๋ฒ์๋ฅผ ๋์ ๊ฒฝ์ฐ ์ค์ ๋ฉ๋๋ค. |
| ZF(Zero Flag) | ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ 0์ผ ๊ฒฝ์ฐ ์ค์ ๋ฉ๋๋ค. |
| SF(Sign Flag) | ์ฐ์ฐ์ ๊ฒฐ๊ณผ๊ฐ ์์์ผ ๊ฒฝ์ฐ ์ค์ ๋ฉ๋๋ค. |
| OF(Overflow Flag) | ๋ถํธ ์๋ ์์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋นํธ ๋ฒ์๋ฅผ ๋์ ๊ฒฝ์ฐ ์ค์ ๋ฉ๋๋ค. |
'๐ ๋ณด์ยท์ทจ์ฝ์ > ๐ธ์์คํ ยท์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [ubunbtu] sscanf, argc/argv ์ค์ต (0) | 2023.09.18 |
|---|---|
| [dreamhack] Exploit Tech: Shellcode (0) | 2023.07.13 |
| [dreamhack] System Hackig Introduction (0) | 2023.07.08 |
| [dreamhack] pwnable.kr bof (0) | 2022.08.21 |
| [ubuntu] gdb ์ค์ต (0) | 2022.08.21 |