32bit ์ด์์ฒด์ vs 64bit ์ด์์ฒด์ WORD: CPU๊ฐ ํ๋ฒ์ ์ฒ๋ฆฌํ ์ ์๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ 32bit ์ํคํ ์ณ๋ word๊ฐ 32bit, 64bit ์ํคํ ์ณ๋ word๊ฐ 64bit!! (๋ ์ฒ๋ฆฌ์๋๊ฐ ๋น ๋ฅด๊ณ ๊ฐ์๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๋ ์ปค์ง) 32๊ฐ์ ๋นํธ๊ฐ ์๋ค๋ ๊ฒ์ 0000 0000 0000 0000 0000 0000 0000 0000 ๋ถํฐ 1111 1111 1111 1111 1111 1111 1111 1111 ๊น์ง, ๊ทธ๋ฌ๋๊น 2^32์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ฐ๊ณ , 64๊ฐ์ ๋นํธ๊ฐ ์๋ค๋ ๊ฒ์ 2^64์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ฐ์ง ๋ฉ๋ชจ๋ฆฌ ํ ์นธ์ 1byte์ ํฌ๊ธฐ๋ฅผ ๊ฐ์ง(1byte๋ฅผ ์ ์ฅํ ์ ์๋ค๋ ๋ป์ธ๋ฏ....? ex: 0xA1) ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ 32bit์ํคํ ์ณ๋ 32bit (4byte) ์ง๋ฆฌ ์ฃผ์ (0x0000..
์ค๋ ๋ค๋ฃฐ ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ๋ค. ์ปค๋ ๋ชจ๋์ ์ ์ ๋ชจ๋ ์์คํ ์ฝ(syscall)์ด๋ ๋ฌด์์ธ๊ฐ? (+syscall๊ณผ call๊ณผ์ ์ฐจ์ด) ํ๋ก์์ ๋? syscall์ ์๋ฆฌ (x86,x86_64) ์ปค๋, ์ ธ, ์ ์ ์ด์์ฒด์ ๋ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋ ๋ชจ๋ ํ๋์จ์ด์ ์ํํธ์จ์ด์ ์ ๊ทผํ ์ ์๋ค. ์ด ๊ถํ์ ๋งค์ฐ ๋ง๊ฐํ๊ธฐ ๋๋ฌธ์ ์ปดํจํฐ๋ ํดํน์ผ๋ก๋ถํฐ ์ด๋ฅผ ๋ณดํธํ๊ธฐ ์ํด ๊ถํ์ ์ปค๋ ๋ชจ๋์ ์ ์ ๋ชจ๋๋ก ๋๋๋ค. ๋ํ ๋ชจ๋๋ง๋ค ์ ๊ทผํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋๋๋๋ฐ, ์ปค๋ ๋ชจ๋์์๋ ์ปค๋ ๊ณต๊ฐ๊ณผ ์ ์ ๊ณต๊ฐ์, ์ ์ ๋ชจ๋์์๋ ์ ์ ๊ณต๊ฐ๋ง ์ ๊ทผ ํ ์์๋ค. ์ปค๋(Kernel) ๋ชจ๋, ์ปค๋ ์ปค๋์ ์ ์ ๊ฐ ์ง์ ํ ์ ์๋ ์ ์์ค์ ์์ (๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ์ ์ถ๋ ฅ, ํ์ผ ์์คํ , ๋คํธ์ํฌ ํต์ ๋ฑ)์ ์คํ ์ปค๋์ ์์์ ์ถ์ํํ์ฌ ๊ด๋ฆฌํจ ์๋๋..
mov, jmp ์ด๋ฐ ๊ธฐ๋ณธ ๋ช ๋ น์ด๋ ๋ค ์๋ ์ํ๋ก ๊ฐ์ ํ๊ฒ ๋ค. ๊ธฐํ๊ฐ ๋๋ค๋ฉด ์ด ๋ถ๋ถ๋ ํฌ์คํ ํ๊ฒ ์ผ๋ ํ์คํ์ง๋ ์๋ค. ์คํ ๊ธฐ๋ณธ ๋ช ๋ น์ด push, pop push val ์คํ ์ต์๋จ์ val์ ๋ฃ์ sub rsp 8 ;์คํ ํฌ์ธํฐ๋ฅผ 8๋งํผ ์ค์ (์ฆ ์คํ ํฌ๊ธฐ๋ฅผ ํ์นธ ๋๋ฆผ) mov [rsp] val ;rsp๊ฐ ๊ฐ๋ฆฌํค๋ ์์น์ val ๋ฃ์ pop reg ์คํ ๋งจ ์๊ฐ์ ๊บผ๋ธํ reg์(addr์๋!!) ๋์ add rsp 8 ;์คํ์ ํ์นธ๋งํผ ์ค์ mov reg [rsp-8] ;์๋ rsp๊ฐ ์๋ ๊ณณ์ ๋ฐ์ดํฐ๋ฅผ reg์ ๋์ ํจ์ ํธ์ถ๊ท์ฝ์ ๋์ค๋ ๋ช ๋ น์ด๋ค call addr addr์ ์๋ ํ๋ก์์ (ํจ์์ ๋น์ทํ ์ฝ๋ ์กฐ๊ฐ์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋จ) ํธ์ถ (์ฐธ๊ณ ๋ก call ์ ์ SYSV์์๋ ์ธ์๋ฅผ ๋ ์ง์คํฐ๋ก..
ํท๊ฐ๋ฆฌ๋ ๊ฑฐ ์ ๋ฆฌ mov rax, rbx
๋ค์ด๊ฐ๋ฉฐ ์ฐ๋ฆฌ์ ๋ชฉ์ ์ ์ปดํจํฐ์ ์์คํ ์ ์ ์ดํดํ๊ณ , ์ทจ์ฝ์ ์ ์์๋ด๋ ๊ฒ์ด๋ค. ์ปดํจํฐ์ ๋ฐ์ดํฐ๋ค์ ๋ฉ๋ชจ๋ฆฌ๋ผ๋ ๊ณต๊ฐ์ ๋ค์ด์๋ค. ํ๊ฐ ์์ด ๋ฉ๋ชจ๋ฆฌ๋ค์ ์์ ํ๊ฑฐ๋, ๋ฎ์ด์ฐ๊ฑฐ๋ ํ๋ ๋ฑ์ ํ์๋ฅผ ํ๊ธฐ ์ํด์๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐ์ดํฐ๋ค์ด ์ด๋ป๊ฒ ๋๋์ด์ ์ ์ฅ๋์ด ์์ผ๋ฉฐ, ๊ทธ ๋ฐ์ดํฐ๋ค์ ์ฉ๋๋ ๋ฌด์์ด๊ณ ์ผ๋ง๋ ์ ๊ทผ๊ฐ๋ฅํ์ง์ ๋ํ์ฌ ์์์ผํ๋ค. ์ปดํจํฐ๋ CPU์์ ์ฐ์ฐ์ ํ์ง๋ง, ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์ฐ์ฐ์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ISA์ ๋ฐ๋ผ์ ๋ช ๋ น์ด๋ฅผ ์ฒ๋ฆฌํ๋ค. ๋ฐ๋ผ์ ๋ง์ฝ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ค์ผ๋๋ค๋ฉด, ์ด์ํ ๋ฐ์ดํฐ๋ก CPU๊ฐ ์ด์ํ ์ฐ์ฐ์ ํ๊ฒ ๋์ด๋ฒ๋ฆฐ๋ค. ์ด๋ฅผ ๋ฉ๋ชจ๋ฆฌ ์ค์ผ(Memory Corruption)์ด๋ผ๊ณ ํ๋ค. ๋ฐ๋ผ์ ๋ฉ๋ชจ๋ฆฌ ์ค์ผ์ ๋ฐฉ์ด/ํน์ ์ ๋ฐํ๋ ค๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ๋ํ ์ดํด๊ฐ ํ์์ ์ด๋ค. CPU๋ ๋ฉ๋ชจ๋ฆฌ, ..
์ถ์ฒ : ๋๋ฆผํต ์์คํ ํดํน ๋ก๋๋งต stage 2 https://dreamhack.io/ ์ ๋ฆฌ ๋ค์ด๊ฐ๋ฉฐ ์ค๋์ ์ปดํจํฐ ๊ตฌ์กฐ์ ISA(๋ช ๋ น์ด ์งํฉ ๊ตฌ์กฐ), x86-84์ ๋ํด ์์๋ณผ ๊ฒ์ด๋ค. ์ปดํจํฐ ๊ตฌ์กฐ ๊ฐ๋จํ๊ฒ ์๊ฐํด๋ณด์. ์ปดํจํฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ ๋ฉ๋ชจ๋ฆฌ, ๊ทธ ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด์์ ์ฐ์ฐํ๋ CPU, ๋คํธ์ํฌ ํต์ ์ ๋ค๋ฃจ๋ LAN ์นด๋, ์๋ฆฌ๋ฅผ ๋ค๋ฃจ๋ ์ฌ์ด๋ ์นด๋ ๋ฑ ์ฌ๋ฌ ๊ธฐ๋ฅ๋ค๋ก ์ด๋ฃจ์ด์ ธ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ธฐ๋ฅ๋ค์ด ์๋ก ์ํธ์์ฉํ๋ฉด์ ์ปดํจํฐ๋ผ๋ ํ๋์ ๊ธฐ๊ธฐ๋ฅผ ๋ง๋ค์ด๋ด๋ ๊ฒ์ด๋ค. ์ด๋ ๊ฒ ์ปดํจํฐ๋ฅผ ์ด๋ป๊ฒ ์ค๊ณํด์ ํ๋์ ๊ธฐ๊ธฐ๋ฅผ ๋ง๋ค์ด๋ด๋๋? ์์ ๊ทธ '์ค๊ณ'๋ฅผ ์ฐ๋ฆฌ๋ '์ปดํจํฐ ๊ตฌ์กฐ(์ํคํ ์ณ)'๋ผ๊ณ ํ ์ ์๊ฒ ๋ค. - ๊ธฐ๋ฅ์ ๋ํ ์ค๊ณ: ์ด๋ป๊ฒ ์ฐ์ฐ์ ํจ์จ์ ์ผ๋ก ํ ๊ฒ์ธ๊ฐ? ๊ทธ๋ฌ๊ธฐ ์ํด์๋ ์ด๋ ํ ๊ธฐ๋ฅ..