์ด์ ๋ธ๋ฆฌ์ด(Assemble)
ํ์ต ๋ชฉํ์ ์ด์ ๊ฐ bootloader๋ฅผ ๊ตฌ์ฑํ๋๋ฐ ํ์ํ๋ค๊ณ ํ์๋ค์
์ฐธ๊ณ ๋ก ๋ถํธ๋ก๋๋ PC ์คํ ์ ํ์ํ ์ ๋ณด๋ฅผ ์ฒ๋ฆฌํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ด์์
์๋ค์ ์ก
์ด์
๋ธ๋ฆฌ์ด(Assembly)์ ๋ํ์ฌ ๋ณด์๊ด์ ์์ ํน์ ๋ ์์๊ฐ๊ณ
๋ ๋์๊ฐ ํ๊ณ ํ์ตํ๊ณ ์ถ๋ค๋ฉด ์๋ก ๋งํฌ๋ก..
์ ๊ฐ ์ด์ ์ ๋ฆฌ๋ ์์ ๋ฌธ์ ๋ณ๋ก ์ ์ฌ๋ ค์.. ๊ทธ๋๋ ์ด์ ๋๋ฉด ์ถฉ๋ถํ ๊ฑฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ด์ ์ ๋ํ์ฌ..
๊ฐ๋จํ๊ฒ ํ์ํ ์ง์์ ์์์ผ๋๊น
๊ณผ์ ์ ๋ํ์ฌ ์์๋ด
์๋ค.
1.์ฐ์ฐ
๊ด๋ จ ๋ช ๋ น์ด
1) ์ฐ์ ์ฐ์ฐ : add, sub, mul, div, inc, dec
์ฐ์ ์ฐ์ฐ | |
add (eax, 3) | ๋ง์ / (eax+=3) |
sub (eax, 3) | ๋บ์ / (eax -=3) |
inc (eax) | op์ ๊ฐ์ 1 ์ฆ๊ฐ / (eax++) |
dec (eax) | op์ ๊ฐ์ 1 ๊ฐ์ / (eax--) |
mul (eax, 3) | ๊ณฑ์ / (eax*3) |
div (eax, 3) | ๋๋์ / (eax/3) |
2) ๋
ผ๋ฆฌ ์ฐ์ฐ : and, or, xor, test
๋ ผ๋ฆฌ ์ฐ์ฐ | |
and | ๋นํธ ์ฐ์ฐ์๋ก and(๋ ๋ค 1) ์ญํ |
or | ๋นํธ ์ฐ์ฐ์๋ก or(ํ๋์ด์ 1) ์ญํ |
xor | ๋นํธ ์ฐ์ฐ์๋ก xor(1๊ฐ๋ง ์์ผ๋ฉด ๋ถ์ ) ์ญํ |
not | ๋นํธ ์ฐ์ฐ์๋ก not(๋ถ์ ) ์ญํ |
์ ๊ธฐ์ test๋ ๋ ผ๋ฆฌ๋ณด๋ค๋ ๋น๊ต ์ฐ์ฐ์๋ก ์ฐ์ด๋๋ฐ ์๋ชป ์ ์ผ์ จ๋๋ณด๋ค์
3) ๋น๊ต ์ฐ์ฐ: cmp
๋น๊ต | |
cmp (op1, op2) | ์๋ก ๊ฐ์ ๋น๊ต, ๋ ์๋ฅผ ๋นผ์ / (op1 == op2์ธ ์์ผ๋ก) ์ด์ ์ ์ ์ ํ๋๊ทธ๋ก ํํ |
test | ์๋ก ๊ฐ์ and๋ก ๋น๊ต / ์ด๊ฑด ๋ณ๋ก ์ ์ธ๊ฑฐ ๊ฐ์ผ๋๊น ๋ญ ์ด๋ฐ ์์ผ๋ก๋ง ์ํด์.. |
๋ ํผ์ฐ์ฐ์(OP)์ ๊ฐ์ ๋น๊ตํ๊ณ , ๋ธ๋๊ทธ๋ฅผ ์ค์
cmp์ test๋ ZE, JE์ ๊ฐ์ ํ๋๊ทธ๋ฅผ ์ง์ ํ๋ ๋น๊ต์ฐ์ฐ์์ธ๋ฐ,
๋ณดํธ์ ์ผ๋ก cmp๋ ๋น๊ต๋ฅผ test๋ ๋ ์ง์คํฐ(Ex. RAX)๋ OP๋ฅผ ์ด๊ธฐํํ๋๋ฐ ์ฌ์ฉํฉ๋๋ค.
์ฐธ๊ณ ๋ก ๋น๊ต ์ฐ์ฐ์ ์ธํธ๋ก ์ค๋ ๋
์๋ค์ ์กฐ๊ฑด์ฐ์ฐ์์ธ
์๋ก ์ด๋ฏธ์ง๋ ์์๋๋ฉด ์ข์ ์์์
๋๋ค
2.๋ฐ์ดํฐ
์ ์ก ๊ด๋ จ ๋ช
๋ น์ด
mov, push, pop, xchg, in, out, xlat, lea, lds, les, lahf
๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํฐ ์ด๋ ๋ช
๋ น์ด๋ก์จ,
์ด๋ค ๊ฐ์ ๋ ์ง์คํฐ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ฎ๊ธฐ๋๋ก ์ง์ํจ
๋ฐ์ดํฐ ์ด๋ | |
mov (rdi, rsi) | ๋ฐ์ดํฐ ๊ฐ์ ๋ฃ๊ธฐ๋ง ํจ / (ris์ ๊ฐ์ rdi์ ๋์ ) |
lea (rsi, [rbx+8* rcx]) | ์ฃผ์๋ฅผ ๊ฐ์ ธ์ด / (rbx+8*rcx๋ฅผ rsi์ ๋์ ) |
๋๋จธ์ง๋ ๋ฉ๋ชจ๋ฆฌ์ ๊ด๋ จ์ด ๊น์๋ฐ์
๋จผ์ ์คํ์์ ๊ฐ์ฅ ๋ง์ด ๋ณด์ค ์น๊ตฌ๋ค์ธ..
- push val : rsp๋ฅผ 8๋งํผ ๋นผ๊ณ , ์คํ์ ์ต์๋จ์ val์ ์๋๋ค
- pop reg : ์คํ ์ต์๋จ์ ๊ฐ์ reg์ ๋ฃ๊ณ , rsp๋ฅผ 8๋งํผ ๋ํจ
push 0xdeadbeef ; push a value to the stack
pop eax ; eax is now 0xdeadbeef
; swap contents of registers
push eax
mov eax, ebx
pop ebx
- xchg(exchange data) eax esi : temp๋ก์จ ์ ๋ณด๋ฅผ ๋ฐ๊พธ๋ ๋ด์ฉ์ธ๋ฐ..
์ฃผ๋ก Array์์ ์ฌ์ฉ๋๋ฉฐ, ๋ฎ์ด์ฐ๊ธฐ์ ๊ฐ์ ๊ธฐ๋ฅ์ ๋๋ค.
int a,b,temp;
//exchange
temp=a;
a=b;
b=a;
- in/out <port> : in/out ๋ช ๋ น์ด๋ ์ธ๋ถ ์ฅ์น๋ I/O ํฌํธ์์ ๊ฐ์ ์ฒ๋ฆฌํ๋ ๋ช ๋ น์ด
in a, <port>
์ฌ๊ธฐ์ a๋ ๋ฐ์ดํฐ ๋ ์ง์คํฐ๋ฅผ ์๋ฏธํ๋ฉฐ, <port>๋ ์ฝ์ด์ฌ ํฌํธ ๋ฒํธ๋ฅผ ๋ํ๋ ๋๋ค. ์๋ฅผ ๋ค์ด, in ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ถ ์ฅ์น์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด์ค๊ฑฐ๋, ํค๋ณด๋ ์ ๋ ฅ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
out ๋ช ๋ น์ด๋ out ํฌํธ, ๋ฐ์ดํฐ ๋ ์ง์คํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
out <port>, a
<port>๋ ์ถ๋ ฅํ ํฌํธ ๋ฒํธ๋ฅผ ๋ํ๋ด๋ฉฐ, a๋ ๋ฐ์ดํฐ ๋ ์ง์คํฐ์ ์ ์ฅ๋ ๊ฐ์ ๋ํ๋ ๋๋ค. ์๋ฅผ ๋ค์ด, out ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ์ฌ LED๋ฅผ ์ผ๊ฑฐ๋, ์ถ๋ ฅ ์ฅ์น์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์์ต๋๋ค.
- xlat : ๋ฉ๋ชจ๋ฆฌ์์ ๋ฐ์ดํธ๋ฅผ ์ฝ์ด์ ๋์ฐ๊ธฐ(AL)์ ์ ์ฅ
ํ ์ด๋ธ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ผ ํ๋ ๊ฒฝ์ฐ ์ ์ฉํจ
xlat
- lea : ์ฃผ์ ๊ณ์ฐ์ ์ํํ์ฌ ์ฃผ์ ๊ฐ์ ๋ ์ง์คํฐ์ ์ ์ฅ
๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ ์ง์คํฐ์ ํ ๋นํ๊ฑฐ๋, ๋ณ์ ์ฃผ์๋ฅผ ๊ณ์ฐํ๋ ๋ฐ ์ฌ์ฉ
lea <๋ ์ง์คํฐ>, <๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๋๋ ๋ณ์ ์ฃผ์>
- lds : ์คํ ์์ ์ฃผ์๋ฅผ ๋ ์ง์คํฐ์ ๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ์ ๋ก๋
๋ฐ์ดํฐ ์ธ๊ทธ๋จผํธ์ ์๋ ๋ณ์์ ์ฃผ์๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ ์ฌ์ฉ
lds <๋ ์ง์คํฐ>, <๋ฉ๋ชจ๋ฆฌ ์ฃผ์>
- las : ์คํ ์์ ์ฃผ์๋ฅผ ๋ ์ง์คํฐ์ ์คํ ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ์ ๋ก๋
์ฝ๋ ์ธ๊ทธ๋จผํธ์ ์๋ ๋ณ์์ ์ฃผ์๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ ์ฌ์ฉ
les <๋ ์ง์คํฐ>, <๋ฉ๋ชจ๋ฆฌ ์ฃผ์>
- lahf : ํ๋๊ทธ ๋ ์ง์คํฐ ๊ฐ์ AH ๋ ์ง์คํฐ์ ๋ก๋
์กฐ๊ฑด ๋ถ๊ธฐ ๋ช ๋ น์ด์์ ํ๋๊ทธ ๋ ์ง์คํฐ ๊ฐ์ ๊ฒ์ฌํ๋ ๋ฐ ์ฌ์ฉ
lahf
3.์กฐ๊ฑด
์ ์ด ๊ด๋ จ ๋ช
๋ น์ด
call, jmp, ret, je/jz, jne/jnz, loop, int, int0, iret
- call: ์๋ธ๋ฃจํด์ ํธ์ถํ๋ ๋ช
๋ น์ด
- ํ์ฌ ์์น๋ฅผ ์ ์ฅํ๊ณ , ์๋ธ๋ฃจํด์ ์์ ์ฃผ์๋ก ๋ถ๊ธฐ
- ์๋ธ๋ฃจํด์ด ๋๋๋ฉด ๋ค์ ์ด์ ์์น๋ก ๋์๊ฐ - jmp: ๋ฌด์กฐ๊ฑด ๋ถ๊ธฐํ๋ ๋ช
๋ น์ด
- ์ฃผ์ด์ง ์ฃผ์๋ก ๋ถ๊ธฐํฉ๋๋ค. - ret: ์๋ธ๋ฃจํด์์ ๋ฉ์ธ ๋ฃจํด์ผ๋ก ๋์๊ฐ๋ ๋ช
๋ น์ด
- ์๋ธ๋ฃจํด์ ๋์์ ์คํ๋๋ฉฐ, ์ ์ฅ๋ ๋ฆฌํด ์ฃผ์๋ก ๋์๊ฐ
- je/jz, jne/jnz: ์กฐ๊ฑด ๋ถ๊ธฐ ๋ช
๋ น์ด
- je/jz๋ ZF ํ๋๊ทธ๊ฐ 1์ผ ๊ฒฝ์ฐ ๋ถ๊ธฐ
- jne/jnz๋ ZF ํ๋๊ทธ๊ฐ 0์ผ ๊ฒฝ์ฐ ๋ถ๊ธฐ - loop: ๋ฃจํ๋ฅผ ์คํํ๋ ๋ช
๋ น์ด
- ECX ๋ ์ง์คํฐ์ ๊ฐ์ 1 ๊ฐ์์ํค๊ณ , 0๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ๊ฒฝ์ฐ์๋ง ๋ฃจํ๋ฅผ ์คํ - int: ์ํํธ์จ์ด ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์ํค๋ ๋ช
๋ น์ด
- ์ง์ ๋ ์ธํฐ๋ฝํธ ๋ฒํธ์ ํด๋นํ๋ ์ธํฐ๋ฝํธ ํธ๋ค๋ฌ๋ฅผ ์คํ
- int0: ๋๋ฒ๊น ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ํํธ์จ์ด ์ธํฐ๋ฝํธ
- iret: ์ธํฐ๋ฝํธ ํธ๋ค๋ฌ
์ด์
๋ธ๋ฆฌ์ด ์ค๋ช
์ ์์ธํ ํ ๋ ค๊ณ ํ๋๋ฐ.. ๋๋ฌด ํ๋ค์ด์ ์ค๊ฐ์ ๋ฒ๋ ธ๋ค์
์๋ก ์๋ฃ๋ ๋น์ทํ๊ธด ํ๋ฐ ์ฐธ๊ณ ํด๋ ์ข์ ๊ฑฐ ๊ฐ์์
์ฐธ๊ณ ์๋ฃ
์ฐธ๊ณ ์ด๋ฏธ์ง