์ด์ ๋ธ๋ฆฌ ์ธ์ด
๋ฐ์ดํฐ ํ์
ํ์ ์ค๋ช
BYTE 8๋นํธ ๋ถํธ ์๋ ์ ์
SBYTE 8๋นํธ ๋ถํธ ์๋ ์ ์
WORD 16๋นํธ ๋ถํธ ์๋ ์ ์
SWORD 16๋นํธ ๋ถํธ ์๋ ์ ์
DWORD 32๋นํธ ๋ถํธ ์๋ ์ ์
SDWORD 32๋นํธ ๋ถํธ ์๋ ์ ์
FWORD 48๋นํธ ์ ์
QWORD 64๋นํธ ์ ์
TBYTE 80๋นํธ ์ ์
ํผ์ฐ์ฐ์(operand) ํ์
ํผ์ฐ์ฐ์ ์ค๋ช
r8 8๋นํธ ๋ฒ์ฉ ๋ ์ง์คํฐ
r16 16๋นํธ ๋ฒ์ฉ ๋ ์ง์คํฐ
r32 32๋นํธ ๋ฒ์ฉ ๋ ์ง์คํฐ
Reg ์์์ ๋ฒ์ฉ ๋ ์ง์คํฐ
Sreg 16๋นํธ ์ธ๊ทธ๋จผํธ ๋ ์ง์คํฐ
Imm 8, 16, 32๋นํธ ์ฆ์ ๊ฐ
imm8 8๋นํธ ์ฆ์ ๊ฐ
imm16 16๋นํธ ์ฆ์ ๊ฐ
imm32 32๋นํธ ์ฆ์ ๊ฐ
r/m8 8๋นํธ ๋ฒ์ฉ ๋ ์ง์คํฐ, ๋ฉ๋ชจ๋ฆฌ
r/m16 16๋นํธ ๋ฒ์ฉ ๋ ์ง์คํฐ, ๋ฉ๋ชจ๋ฆฌ
r/m32 32๋นํธ ๋ฒ์ฉ ๋ ์ง์คํฐ, ๋ฉ๋ชจ๋ฆฌ
mem 8, 16, 32๋นํธ ๋ฉ๋ชจ๋ฆฌ
์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด
โก INC(increase)
ํผ์ฐ์ฐ์์ 1์ ๋ํ๋ค. ์ฐ์ฐ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ZF๋ OF๊ฐ ์ธํธ ๋ ์ ์๋ค.
INC reg
INC mem
โก DEC(Decrease)
ํผ์ฐ์ฐ์์์ 1์ ๋นผ๋ ๋ช ๋ น์ด๋ค. ์ฐ์ฐ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ZF๋ OF๊ฐ ์ธํธ ๋ ์ ์๋ค.
DEC reg
DEC mem
โก ADD(Add)
Destination์ Source์ ๊ฐ์ ๋ํด์ Destination์ ์ ์ฅํ๋ ๋ช ๋ น์ด๋ค. ์ฐ์ฐ๊ฒฐ๊ณผ์ ๋ฐ๋ผ์ ZF, OF, CF๊ฐ ์ธํธ ๋ ์ ์๋ค.
ADD destination, source
ADD reg, reg
ADD reg, imm
ADD mem, reg
ADD mem, imm
ADD reg, mem
ADD eax, 123
์ ๋ช ๋ น์ eax ๋ ์ง์คํฐ์ 123์ ๋ํด์ eax ๋ ์ง์คํฐ์ ์ ์ฅํ๋ค.
โก SUB(Subtract)
Destination์ Source์ ๊ฐ์ ๋นผ์ Destination์ ์ ์ฅํ๋ ๋ช ๋ น์ด๋ค. ์ฐ์ฐ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ์ ZF, OF, CF๊ฐ ์ธํธ(1)๋ ์ ์๋ค.
SUB destination, source
SUB reg, reg
SUB reg, imm
SUB mem, reg
SUB mem, imm
SUB eax, 123
์ ๋ช ๋ น์ eax ๋ ์ง์คํฐ์ 123์ ๋นผ์ eax ๋ ์ง์คํฐ์ ์ ์ฅํ๋ค.
โก MUL(Multiply Unsigned Integer)
๋ถํธ ์๋ al, ax, eax์ ๊ฐ์ ํผ์ฐ์ฐ์์ ๊ณฑํ๋ค. ํผ์ฐ์ฐ์๊ฐ 8๋นํธ์ด๋ฉด al๊ณผ ๊ณฑํด์ ax์ ์ ์ฅ๋๊ณ , 16๋นํธ์ด๋ฉด ax์ ๊ณฑํ๊ณ dx:ax์ ์ ์ฅ๋๋ค.
MUL reg
MUL mem
๊ฒฐ๊ณผ์ ๋ฐ๋ผ OF, ZF๊ฐ ์ธํธ(1) ๋ ์ ์๋ค.
โก IMUL(Integer Multiplication)
๋ถํธ ์๋ al, ax, eax์ ๊ฐ์ ํผ์ฐ์ฐ์์ ๊ณฑํ๋ค. ๊ฒฐ๊ณผ์ ๋ฐ๋ผ CF, OF๊ฐ ์ธํธ(1) ๋ ์ ์๋ค.
IMUL r/m8
IMUL r/m16
IMUL r/m32
๋จ์ผ ํผ์ฐ์ฐ์์ด๊ณ , ํผ์ฐ์ฐ์๋ฅผ al, ax, eax์ ๊ณฑํ๋ค.
IMUL destination, value
IMUL r16, r/m16 IMUL r16, imm8
IMUL r32, r/m32 IMUL r32, imm8
IMUL r16, imm16 IMUL r32, imm32
value๋ฅผ al, ax, eax์ ๊ณฑํด์ destination์ ์ ์ฅํ๋ค.
IMUL destination, value, value
IMUL r16, r/m16, imm8 IMUL r16, r/m16, imm16
IMUL r32, r/m32, imm8 IMUL r32, r/m32, imm32
value๋ผ๋ฆฌ ๊ณฑํด์ destination์ ์ ์ฅํ๋ค.
์ฐ์ฐ๊ฒฐ๊ณผ๊ฐ destination ๋ ์ง์คํฐ์ ํฌ๊ธฐ๋ณด๋ค ํฌ๋ค๋ฉด OF, CF๊ฐ ์ธํธ(1)๋๋ค.
โก DIV(Divide Unsigned Integer)
8, 16, 32๋นํธ ๋ถํธ ์๋ ์ ์์ ๋๋์ ์ ์ํํ๋ค.
DIV reg
DIV mem
๊ฒฐ๊ณผ์ ๋ฐ๋ผ์ CF, OF, ZF๊ฐ ์ธํธ(1) ๋ ์ ์๋ค.
โก MOV(Move)
Source์์ Destination์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ค.
MOV Destination, Source
MOV reg, reg
MOV reg, imm
MOV mem, reg
MOV mem, imm
โก MOVS(Move String)
Source์์ Destination์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ค.
MOVS Destination, Source
โก MOVSB, MOVSW, MOVSD(Move String)
SI ๋๋ ESI ๋ ์ง์คํฐ์ ์ํด ์ง์ ๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๋ด์ฉ์ DI ๋๋ EDI ๋ ์ง์คํฐ์ ์ํด ์ง์ ๋๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ก ๋ณต์ฌํ๋ค.
MOVSB๋ BYTE ๋จ์๋ก ๋ณต์ฌ, MOVSW๋ WORD ๋จ์๋ก ๋ณต์ฌ, MOVSD๋ DWORD ๋จ์๋ก ๋ณต์ฌํ๋ค. ๋ฐฉํฅ ํ๋๊ทธ(DF)๊ฐ 1๋ก ์ธํธ ๋์ด ์์ผ๋ฉด ESI์ EDI๋ ๋ณต์ฌ ์์ ๊ฐ์ํ๊ฒ ๋๊ณ , DF๊ฐ 0์ผ๋ก ์ธํธ ๋์ด ์์ผ๋ฉด ESI์ EDI๋ ๋ณต์ฌ ์์ ์ฆ๊ฐํ๊ฒ ๋๋ค.
MOVSB
MOVSW
MOVSD
โก MOVSX(Move with Sign-Extended)
BYTE๋ WORD ํฌ๊ธฐ์ ํผ์ฐ์ฐ์๋ฅผ WORD๋ DWORD ํฌ๊ธฐ๋ก ํ์ฅํ๊ณ ๋ถํธ๋ ๊ทธ๋๋ก ์ ์งํ๋ค.
MOVSX reg32, reg16 MOVSX reg32, mem16
MOVSX reg16, reg8 MOVSX reg16, mem8
โก MOVZX(Move with Zero-Extended)
BYTE๋ WORD ํฌ๊ธฐ์ ํผ์ฐ์ฐ์๋ฅผ WORD๋ DWORD ํฌ๊ธฐ๋ก ํ์ฅํ๊ณ ๋จ์ ๋นํธ๋ 0์ผ๋ก ์ฑ์ด๋ค.
MOVZX reg32, reg16 MOVZX reg32, mem16
MOVZX reg16, reg8 MOVZX reg16, mem8
โก INT(Interrupt)
์ํํธ์จ์ด ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์์ผ ์ด์์ฒด์ ์ ์๋ธ๋ฃจํด์ ํธ์ถํ๋ค.
INT imm
INT 3
โก AND(Logical AND)
Destination๊ณผ Source ํผ์ฐ์ฐ์์ ๊ฐ ๋นํธ๊ฐ AND ์ฐ์ฐ๋๋ค. AND ์ฐ์ฐ์ ํตํด์ OF, CF๊ฐ 0์ผ๋ก ์ธํธ ๋๊ณ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ์ ZF๊ฐ 1๋ก ์ธํธ ๋ ์ ์๋ค.
AND reg, reg AND reg, imm
AND mem, reg AND mem, imm
AND reg, mem
โก OR(Inclusive OR)
Destination๊ณผ Source ํผ์ฐ์ฐ์์ ๊ฐ ๋นํธ๊ฐ OR ์ฐ์ฐ๋๋ค. OR ์ฐ์ฐ์ ํตํด์ OF, CF๊ฐ 0์ผ๋ก ์ธํธ ๋๊ณ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ์ ZF๊ฐ 1๋ก ์ธํธ ๋ ์ ์๋ค.
OR reg, reg OR reg, imm
OR mem, reg OR mem, imm
OR reg, mem
โก XOR(Exclusive OR)
Destination๊ณผ Source ํผ์ฐ์ฐ์์ ๊ฐ ๋นํธ๊ฐ XOR ์ฐ์ฐ๋๋ค. XOR ์ฐ์ฐ์ ํตํด์ OF, CF๊ฐ 0์ผ๋ก ์ธํธ ๋๊ณ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ์ ZF๊ฐ 1๋ก ์ธํธ ๋ ์ ์๋ค. ํผ์ฐ์ฐ์์ ๋ ๊ฐ์ด ๊ฐ์ ๊ฐ์ด๋ผ๋ฉด ๊ฒฐ๊ณผ๋ ํญ์ 0์ด ๋๋ค.
๋ ์ง์คํฐ๋ฅผ 0์ผ๋ก ์ด๊ธฐํ ์ํฌ ๋ MOV ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๊ธฐ๋ณด๋ค๋ XOR reg, reg๋ก ๋ง์ด ์ฌ์ฉํ๋ค.
XOR reg, reg XOR reg, imm
XOR mem, reg XOR mem, imm
XOR reg, mem
โก TEST(Test)
๋ ํผ์ฐ์ฐ์ ์ฌ์ด์ ๋ ผ๋ฆฌ์ ์ธ AND ์ฐ์ฐ์ ์ํํ์ฌ ํ๋๊ทธ ๋ ์ง์คํฐ์ ์ํฅ์ ์ฃผ์ง๋ง ๊ฒฐ๊ณผ๊ฐ์ ์ ์ฅํ์ง ์๋๋ค. OF, CF๋ ํญ์ 0์ผ๋ก ์ธํธ ๋๊ณ TEST ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ์ด 0์ด๋ฉด ZF๊ฐ 1๋ก ์ธํธ, 0์ด ์๋๋ฉด ZF๊ฐ 0์ผ๋ก ์ธํธ ๋๋ค.
TEST reg, reg TEST reg, imm
TEST mem, reg TEST mem, imm
TEST reg, mem
โก STC(Set Carry Flag)
์บ๋ฆฌ ํ๋๊ทธ(CF)๋ฅผ 1๋ก ์ธํธ ํ๋ค.
STC
โก CLC(Clear Carry Flag)
์บ๋ฆฌ ํ๋๊ทธ(CF)๋ฅผ 0์ผ๋ก ์ธํธ ํ๋ค.
CLC
โก STD(Set Direction Flag)
๋ฐฉํฅ ํ๋๊ทธ(DF)๋ฅผ 1๋ก ์ธํธ ํ๋ค.
STD
โก CLD(Clear Direction Flag)
๋ฐฉํฅ ํ๋๊ทธ(DF)๋ฅผ 0์ผ๋ก ์ธํธ ํ๋ค.
CLD
โก STI(Set Interrupt Flag)
์ธํฐ๋ฝํธ ํ๋๊ทธ(IF)๋ฅผ 1๋ก ์ธํธ ํ๋ค.
STI
โก CLI(Clear Interrupt Flag)
์ธํฐ๋ฝํธ ํ๋๊ทธ(IF)๋ฅผ 0์ผ๋ก ์ธํธ ํ๋ค.
CLI
โก SHL(Shift Left)
Destination ํผ์ฐ์ฐ์๋ฅผ Source ํผ์ฐ์ฐ์์ ํฌ๊ธฐ๋งํผ ์ผ์ชฝ์ผ๋ก ๊ฐ ๋นํธ๋ฅผ ์ํํธ ์ํจ๋ค. ์ต์์ ๋นํธ๋ ์บ๋ฆฌ ํ๋๊ทธ(CF)๋ก ๋ณต์ฌ๋๊ณ ์ตํ์ ๋นํธ๋ 0์ผ๋ก ์ฑ์์ง๋ค.
SHL reg, imm8 SHL mem, imm8
SHL reg, CL SHL mem, CL
โก SHR(Shift Right)
Destination ํผ์ฐ์ฐ์๋ฅผ Source ํผ์ฐ์ฐ์์ ํฌ๊ธฐ๋งํผ ์ค๋ฅธ์ชฝ์ผ๋ก ๊ฐ ๋นํธ๋ฅผ ์ํํธ ์ํจ๋ค. ์ต์์ ๋นํธ๋ 0์ผ๋ก ์ฑ์์ง๊ณ , ์ตํ์ ๋นํธ๋ ์บ๋ฆฌ ํ๋๊ทธ(CF)๋ก ๋ณต์ฌ๋๋ค.
SHR reg, imm8 SHR mem, imm8
SHR reg, CL SHR mem, CL
โก PUSH(Push on Stack)
์คํ์ ๊ฐ์ ๋ฃ๋๋ค. ESP์ ๊ฐ์ด 4๋งํผ ์ค์ด๋ค๊ณ ์ด ์์น์ ์๋ก์ด ๊ฐ์ด ์ฑ์์ง๋ค.
PUSH reg16 PUSH reg32
PUSH mem16 PUSH mem32
PUSH imm16 PUSH imm32
โก PUSHAD(Push All)
EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP ๋ ์ง์คํฐ์ ๊ฐ์ ์คํ์ PUSHํ๋ค. ๋ ์ง์คํฐ์ ๊ฐ์ ๋ณด๊ดํด์ผ ํ ํ์๊ฐ ์์ ๋ ์ฌ์ฉํ๋ค.
PUSHAD
โก PUSHFD(Push Flags)
ํ๋๊ทธ ๋ ์ง์คํฐ๋ฅผ ์คํ์ PUSHํ๋ค. ํ๋๊ทธ ๋ ์ง์คํฐ์ ๊ฐ์ ๋ณด๊ดํด์ผ ํ ํ์๊ฐ ์์ ๋ ์ฌ์ฉํ๋ค.
PUSHFD
โก POP(Pop from Stack)
ESP ๋ ์ง์คํฐ๊ฐ ๊ฐ๋ฆฌํค๊ณ ์๋ ์์น์ ์คํ ๊ณต๊ฐ์์ 4Byte ๋งํผ์ Destination ํผ์ฐ์ฐ์์ ๋ณต์ฌํ๊ณ ESP ๋ ์ง์คํฐ์ ๊ฐ์ 4๋ฅผ ๋ํ๋ค.
POP destination
POP reg16 POP reg32
POP mem16 POP mem32
โก POPAD(Pop All from Stack)
์คํ์ ์กด์ฌํ๋ ๊ฐ์ EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP ๋ ์ง์คํฐ๋ก POPํ๋ค. PUSHAD ๋ช ๋ น์ด๋ก ์คํ์ ๋ณด๊ดํด ๋์ ๋ ์ง์คํฐ ์ ๋ณด๋ฅผ ๋ค์ ์ด์ฉํ๋ ค๊ณ ํ ๋ ์ฌ์ฉํ๋ค.
POPAD
โก POPFD(Pop Flags from Stack)
์คํ์ ์กด์ฌํ๋ ๊ฐ์ ํ๋๊ทธ ๋ ์ง์คํฐ๋ก POPํ๋ค. PUSHFD ๋ช ๋ น์ด๋ก ์คํ์ ๋ณด๊ดํด ๋์ ๋ ์ง์คํฐ ์ ๋ณด๋ฅผ ๋ค์ ์ด์ฉํ๋ ค๊ณ ํ ๋ ์ฌ์ฉํ๋ค.
POPFD
โก XCHG(Exchange)
๋ ํผ์ฐ์ฐ์ ๋ด์ฉ์ด ์๋ก ๊ตํ๋๋ค. XCHG ๋ช ๋ น์ imm ๊ฐ์ด ํผ์ฐ์ฐ์๋ก ์ฌ ์ ์๋ค.
XCHG reg, reg
XCHG reg, mem
XCHG mem, reg
โก NEG(Negate)
ํผ์ฐ์ฐ์์ 2์ ๋ณด์๋ฅผ ๊ณ์ฐํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ํผ์ฐ์ฐ์์ ์ ์ฅํ๋ค.
NEG reg
NEG mem
โก PTR
ํผ์ฐ์ฐ์์ ํฌ๊ธฐ๋ฅผ ์ฌ์ค์ ํ๋ค.
MOV eax, DWORD PTR value
์์ ๋ช ๋ น์ด๋ value์ ํฌ๊ธฐ๋ฅผ DWORD ํฌ๊ธฐ๋ก ์ฌ์ค์ ํ์ฌ eax ๋ ์ง์คํฐ์ ๋ณต์ฌํ๋ผ๋ ์๋ฏธ์ด๋ค.
โก OFFSET
์ธ๊ทธ๋จผํธ์ ์์์ผ๋ก๋ถํฐ ๋ณ์๊ฐ ์์นํ ๊ฑฐ๋ฆฌ๊น์ง์ ์๋์ ๊ฑฐ๋ฆฌ๋ฅผ ๋ฆฌํดํ๋ค.
MOV esi, OFFSET value
์ ๋ช ๋ น์ด๋ value๊ฐ ์กด์ฌํ๋ ์์น๋ฅผ ์ธ๊ทธ๋จผํธ ์์ ์ง์ ์ผ๋ก๋ถํฐ์ ์๋์ ๊ฑฐ๋ฆฌ๋ก ๊ตฌํด์ esi ๋ ์ง์คํฐ์ ๋ณต์ฌํ๋ผ๋ ์๋ฏธ์ด๋ค.
โก LEA(Load Effective Address)
Source ํผ์ฐ์ฐ์์ ์ ํจ ์ฃผ์๋ฅผ ๊ณ์ฐํ์ฌ Destination ํผ์ฐ์ฐ์์ ๋ณต์ฌํ๋ค. ๊ฐ๋จํ ์ฃผ์๋ฅผ ์์๋ด์ ๋ณต์ฌํ๋ ๋ช ๋ น์ด๋ผ๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค.
LEA reg, mem
โก REP(Repeat String)
ECX ๋ ์ง์คํฐ๋ฅผ ์นด์ดํฐ๋ก ์ฌ์ฉํด์ ๋ฌธ์์ด ๊ด๋ จ ๋ช ๋ น์ ECX > 0์ธ ๋์ ๋ฐ๋ณตํ๋ค.
REP MOVS destination, source
โก JMP(Jump Unconditionally to Label)
ํผ์ฐ์ฐ์์ ์์น๋ก ์คํ ํ๋ฆ์ด ๋ณ๊ฒฝ๋๋ค. ํผ์ฐ์ฐ์๊ฐ ๊ฐ๋ฆฌํค๋ ์ฝ๋๋ก ์ ํํด์ ์คํํ๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค. ํผ์ฐ์ฐ์์๋ ๋ ์ด๋ธ์ด๋ ๋ ์ง์คํฐ, ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ด ์ฌ ์ ์๋ค.
short ์ ํ๋ -127~127๋ฐ์ดํธ ๋ฒ์ ์์์ ์ฌ์ฉ๋๊ณ , near ์ ํ๋ ๊ฐ์ ์ธ๊ทธ๋จผํธ ๋ด๋ถ์์ ์ฌ์ฉ๋๋ค. far ์ ํ๋ ํ์ฌ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ฒ์ด๋ ๋ ์ฌ์ฉ๋๋ฉฐ JMP ๋ช ๋ น์ด๋ ๋๋์์ฌ ๋ฆฌํด ์ด๋๋ ์ค ๊ฐ์ ์ ์ฅํ์ง ์๋๋ค. ์ด ๋ช ๋ น์ด๋ ๋ฌด์กฐ๊ฑด ์ ํ ๋ช ๋ น์ด์ธ๋ฐ ์ ํ ๋ช ๋ น์ ์ด๋ค ํ์์ ๋ง์ ๋๋ง ์ ํํ๋ ์กฐ๊ฑด ํ์์ ์ ํ ๋ช ๋ น๋ ์๋ค.
JMP shortlabel JMP reg16
JMP nearlabel JMP mem16
JMP farlabel JMP mem32
โก CALL(Call a Procedure)
ํจ์ ํธ์ถ ์ ์ฌ์ฉ๋๋ค. JMP ๋ช ๋ น์ด ๊ฐ์ด ํ๋ก๊ทธ๋จ์ ์คํ ํ๋ฆ์ด ๋ณ๊ฒฝ๋์ง๋ง JMP ๋ช ๋ น์ด์ ๋ค๋ฅธ ์ ์ ๋๋์์ฌ ๋ฆฌํด ์ด๋๋ ์ค(CALL ๋ค์ ๋ช ๋ น)๋ฅผ ์คํ์ ์ ์ฅํ๋ค๋ ๊ฒ์ด๋ค. ๋๋์์ฌ ์ฃผ์๋ฅผ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ํจ์ ํธ์ถ ํ ์๋ ์์น๋ก ์คํ ํ๋ฆ์ ๋๋๋ฆด ์ ์๋ค. ํธ์ถํ ํจ์๊ฐ ์ผ์ ๋ค ๋ง์น๋ฉด ์๋ ์์น์์ ๋ค์ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ์ ์์์ ์๋ฏธํ๋ค.
CALL nearlabel CALL farlabel
CALL mem16 CALL mem32 CALL reg
(๋๋ฒ๊น ์ ํ๋ฉด์ ๋ณด๊ฒ ๋๋ Call ํ์๋ค)
Call ํจ์ ์ฃผ์
Call DWORD PTR[EAX+5]
Call <JMP to API> ํน์ api ์ง๋ชฉ
โก CMP(Compare)
๋ ํผ์ฐ์ฐ์๋ฅผ ๋น๊ตํ๋ ์์ ์ ํ๋ค. Destination ํผ์ฐ์ฐ์์์ Source ํผ์ฐ์ฐ์๋ฅผ ๋ฌต์์ ์ผ๋ก ๋นผ์ ๊ฐ์ ๋น๊ตํ๋ค. ๋ ํผ์ฐ์ฐ์์ ๊ฐ์ด ๊ฐ๋ค๋ฉด ๊ฒฐ๊ณผ๋ 0์ด ๋๊ณ ์ ๋ก ํ๋๊ทธ(ZF)๊ฐ 1๋ก ์ธํธ ๋๋ค. ๋ค๋ฅด๋ค๋ฉด ์ ๋ก ํ๋๊ทธ(ZF)๋ 0์ผ๋ก ์ธํธ ๋๋ค.
CMP reg, reg CMP reg, imm
CMP mem, reg CMP mem, imm
CMP reg, mem
โก NOP(No Operation)
์๋ฌด ์ผ๋ ํ์ง ์๋ ๋ช ๋ น์ด์ด๋ค. ๋ฆฌ๋ฒ์ฑ ์์ ์์ ๋ชฉ์ ์ ๋ฐ๋ผ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์๋ค.
NOP
์กฐ๊ฑด ์ ํ ๋ช ๋ น
์กฐ๊ฑด ์ ํ ๋ช ๋ น์ JMP ๋ช ๋ น์ด์๋ ๋ค๋ฅด๊ฒ CMP ๋ช ๋ น ๊ฐ์ด ํน์ ํ๋๊ทธ ๋ ์ง์คํฐ๋ฅผ ๋ณ๊ฒฝ์ํฌ ์ ์๋ ๋ช ๋ น์ด๋ฅผ ํตํด์ ํน์ ์กฐ๊ฑด์ด ๋ง์กฑํ๊ฒ ๋๋ค๋ฉด ์ ํ๋ฅผ ์ํํ๊ฒ ๋๋ ๋ช ๋ น์ด์ด๋ค. ๋ช ๋ น์ด ์์ฒด๊ฐ ์ฒ์ ๋ณผ ๋ ์ด๋ค ์ผ์ ํ๋์ง ์ดํดํ๊ธฐ๊ฐ ํ๋ค๊ฒ ๋์ด ์๋ค. ๋ค์์ ์ฌ๋ฌ ์กฐ๊ฑด ํ์์ ์ ํ ๋ช ๋ น๊ณผ ๋ช ๋ น์ ์๋ฏธ, ๊ทธ๋ฆฌ๊ณ ์ด๋ค ์กฐ๊ฑด(ํ๋๊ทธ ๋ ์ง์คํฐ์ ์ํ)์ ๋ง์กฑํด์ผ ๋ช ๋ น์ด๊ฐ ์ํ๋๋์ง ํ๋ก ์ ๋ฆฌํ์๋ค.
๋ช ๋ น์ด
๋ช ๋ น์ด์ ์๋ฏธ
๋ช ๋ น์ด๊ฐ ์ํ๋๊ธฐ ์ํ ํ๋๊ทธ ๋ ์ง์คํฐ์ ๋ฒ์ฉ ๋ ์ง์คํฐ์ ์ํ
JA Jump if (unsigned) above CF=0 and ZF=0
JAE Jump if (unsigned) above or equal CF=0
JB Jump if (unsigned) below CF=1
JBE Jump if (unsigned) below or equal CF=1 or ZF=1
JC Jump if carry flag set CF=1
JCXZ Jump if CX is 0 CX=0
JE Jump if equal ZF=1
JECXZ Jump if ECX is 0 ECX=0
JG Jump if (signed) greater ZF=0 and SF=0
JGE Jump if (signed) greater or equal SF=OF
JL Jump if (signed) less SF!=OF
JLE Jump if (signed) less or equal ZF=1 and SF!=OF
JNA Jump if (unsigned) not above CF=1 or ZF=1
JNAE Jump if (unsigned) not above or equal CF=1
JNB Jump if (unsigned) not below CF=0
JNBE Jump if (unsigned) not below or equal CF=0 and ZF=0
JNC Jump if carry flag not set CF=0
JNE Jump if not equal ZF=0
JNG Jump if (signed) not greater ZF=1 or SF!=OF
JNGE Jump if (signed) not greater or equal SF!=OF
JNL Jump if (signed) not less SF=OF
JNLE Jump if (signed) not less or equal ZF=0 and SF=OF
JNO Jump if overflow flag not set OF=0
JNP Jump if parity flag not set PF=0
JNS Jump if sign flag not set SF=0
JNZ Jump if not zero ZF=0
JO Jump if overflow flag is set OF=1
JP Jump if parity flag set PF=1
JPE Jump if parity is equal PF=1
JPO Jump if parity is odd PF=0
JS Jump if sign flag is set SF=1
JZ Jump if zero flag is set ZF=1
3. ์ํฉ๋ณ ์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด
์ด์ ๋ธ๋ฆฌ ๋ช ๋ น์ด์ ๋ํ ์ดํด๋ฅผ ๋๊ธฐ ์ํด์ ์ํฉ๋ณ๋ก ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง ์ ๋ฆฌํ๋๋ก ํ์.
๋ฐ์ดํฐ ์ด๋
์ด์ ๋ธ๋ฆฌ์์ ๋ฐ์ดํฐ๋ฅผ ์ฎ๊ธฐ๋ ๋ฐฉ๋ฒ์ MOV ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
MOV [๋ณต์ฌ๋ ๊ณณ], [์ฝ์ด๋ค์ผ ๊ณณ]
MOV EAX, EBX์ ๊ฒฝ์ฐ EBX ๋ ์ง์คํฐ๋ฅผ EAX์ ๋์ ํ๋ ๊ฒ์ด๋ค.
MOV EAX, [EBX]๋ก ํํ๋์ด ์๋ ๊ฒฝ์ฐ์๋ EBX๊ฐ ๊ฐ๋ฆฌํค๋ ๊ฐ์ EAX์ ๋์ ํ๋ค.
MOV EAX, [EBP + 10]์ ๊ฒฝ์ฐ EBP์ ์ฃผ์์์ 10๋งํผ ์ฆ๊ฐํ ์ฃผ์์ง์ ๊ฐ์ EAX๋ก ๋์ ํ๋ค.
MOV EAX, [EBP - 10]์ ๊ฒฝ์ฐ EBP์ ์ฃผ์์์ 10๋งํผ ๊ฐ์ํ ์ฃผ์์ง์ ๊ฐ์ EAX๋ก ๋์ ํ๋ค.
[EBP + 10]๊ณผ [EBP ? 10]์ ๊ฒฝ์ฐ์ ํจ์ ๋ด๋ถ์ ์กด์ฌํ๋ ๋ช ๋ น์ด์๋ค๋ฉด EBP๋ฅผ ๊ธฐ์ค์ผ๋ก 10 ์ฆ๊ฐ๋ ๊ฒฝ์ฐ์๋ ํ๋ผ๋ฏธํฐ๋ก ๋์ด์ค๋ ๊ฐ์ผ ์ ์๊ณ , EBP๋ฅผ ๊ธฐ์ค์ผ๋ก 10 ๊ฐ์ํ ๊ฒฝ์ฐ์๋ ํจ์ ๋ด๋ถ์์ ์ฐ์ด๋ ์ง์ญ๋ณ์ ์ผ ์ ์๋ค.
LEA EAX, [EBP + 10] ์ ๊ฒฝ์ฐ์๋ EBP ์ฃผ์์์ 10๋งํผ์ ์ฃผ์์ง๋ฅผ ๋ํ ๊ฐ์ ์๋ฏธํ๋ ๊ฒ์ด ์๋๋ผ EBP์ ์ฃผ์์ง ๊ฐ์์ 10์ ๋ํ ๊ฐ์ EAX๋ก ๋์ ํ๊ฒ ๋๋ค.
์ ์ญ๋ณ์
์ ์ญ๋ณ์์ ๊ฒฝ์ฐ data ์น์ ์ ์ ์ฅ์ด ๋๊ณ , ํ๋ก๊ทธ๋จ์ ์ด๊ธฐํํ๋ ๊ณผ์ ์์ ์ธํ ๋๊ฑฐ๋ ์คํ ์ค์ ๋ณ๊ฒฝ์ด ๋ ์๋ ์๋ค. ์๋ฅผ ๋ค์ด ๋ฌธ์์ด์ด ์ฐธ์กฐ๋๋ ๋ฐฉ๋ฒ์ ๋ณด๋๋ก ํ์.
.data:0088A1A1 โThis Program is powerfulโ, 0
data ์น์ ์ ๋ฌธ์์ด์ด ์ด๋ ๊ฒ ์กด์ฌํ๋ฉด, ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง ํ์ธํ์.
.text:006A2A22 mov eax, 88A1A1h
.text:006A2A27 retn
๋น๊ต๊ตฌ๋ฌธ cmp์ test
cmp ๋ช ๋ น์ด๋ ์ฃผ์ด์ง๋ ๋ ๊ฐ์ ๋บ์ ์ ํด์ ์ฒ๋ฆฌํ๊ณ , test ๋ช ๋ น์ด๋ ์ฃผ์ด์ง๋ ๋ ๊ฐ์ ๋ํด์ ์ฒ๋ฆฌํ๋ ์ ์ด ๋ค๋ฅด๋ฉฐ, ๋ ๋ช ๋ น์ด๊ฐ ๊ฐ์ง ์กฐ๊ฑด ๋ถ๊ธฐ๋ฌธ์ ๊ฒฐ์ ํ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ค๋ ์ ์ ๊ฐ๋ค.
cmp eax, ebx๋ ๋ ๊ฐ์ ๋นผ์ 0์ด๋ฉด ์ฐธ(๊ฐ์ ๊ฐ)์ด ๋๋ ํํ์ด๋ค.
test ์ฐ์ฐ์ ๋ณดํต ํธ์ถ๋ ํจ์๋ค์ด ์ผ๋ฐ์ ์ผ๋ก ๋ฆฌํด ๊ฐ์ EAX ๋ ์ง์คํฐ์ ์ ์ฅํ๋ ๊ฒ์ ์ด์ฉํ์ฌ, ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ๋๋ค.
CALL my_function
TEST EAX, EAX
JZ ์ฃผ์์ง
ํจ์๋ฅผ callํ๊ณ , ํจ์์ ๋ฆฌํด ๊ฐ์ผ๋ก EAX ๊ฐ์ด ์ธํ ๋๋ฉด, ๋น๊ต๋ฅผ ํ๋ ๊ฒ์ด๋ค.
CMP๊ฐ ์ํฅ์ ๋ฏธ์น๋ FLAG๋ค์ ZF, OF, SF, CF์ด๊ณ , TEST๊ฐ ์ํฅ์ ๋ฏธ์น๋ FLAG๋ SF, ZF, PF๊ฐ ์๋ค. ๋ง์ฝ ZF๊ฐ 1๋ก ์ธํ ๋์๋ค๋ฉด ์ฃผ์ด์ง ๋ ๊ฐ์ด ๊ฐ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค. ๊ทธ ์ธ์ ๊ฐ์ง ์์์ ๊ฒฝ์ฐ์๋ OF, SF, CF๋ฅผ ์ด์ฉํด์ ์ด๋ ์ชฝ์ด ๋ ํฐ์ง๋ฅผ ์ ์ ์๋ค.
๋ถ๊ธฐ๋ฌธ์ ์ฌ์ฉ
๋ถ๊ธฐ๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ์ ํ ๊ตฌ๋ฌธ์ ์ด์ผ๊ธฐํ๋ฉฐ, if๋ฌธ์ ์ด๋ป๊ฒ ์ฌ์ฉํ๋์ง์ ๋ฐ๋ผ์ ๋ฌ๋ผ์ง๋ ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ค์ ์ดํด๋ณด๊ฒ ๋ค.
โก C์ธ์ด ์์ค
if (๋ณ์ == 0) {
if๋ฌธ ๋ด์ ํจ์ ํธ์ถ
} ์ดํ ๋์
โก ์ด์ ๋ธ๋ฆฌ์ด ๋ณํ
mov eax, ๋ณ์๊ฐ
test eax, eax
jnz ์ดํ ๋์
if๋ฌธ ๋ด์ ํจ์ ํธ์ถ
if๋ฌธ์์ ์ฌ์ฉ๋๋ ๋ณ์๋ฅผ ๋จผ์ mov๋ก ๊ฐ์ ๋์ ํ๊ณ , test๋ก ๋น๊ต๋ฅผ ํ ๋ค์์ JNZ๋ฅผ ์ด์ฉํ์ฌ ์ดํ ๋์์ ํ ์ง if๋ฌธ ๋ด๋ถ์ ํจ์๋ฅผ ํธ์ถํ ์ง๋ฅผ ๊ฒฐ์ ํ๋ค.
JZ๊ฐ ์๋, JNZ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ๋์ ์กฐ๊ฑด์ ๋ปํ๋ N(not)์ด ์ถ๊ฐ๋์ด์ ์ฒ๋ฆฌ๋๋ ๊ฒ์ ์ ์ ์๋ค. ์ด์ธ์ if๋ฌธ์ if ๋ค์์ else ๊ตฌ๋ฌธ์ด ์ฌ๋ฌ ๋ฒ ๋ ๋ํ๋ ์ ์๋ค๋ ์ ์ ๊ณ ๋ คํด์ ๋ณํ๋ ์ฝ๋๋ค๋ ๋น์ทํ ๋ฐฉ์์ผ๋ก ๋ถ์ํ๋ฉด ๋๋ค.
๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉ
๋ฐ๋ณต๋ฌธ์ ๊ฒฝ์ฐ์๋ ๊ฐ์ ๋ด์ฉ์ด ๋ฐ๋ณต๋์ด ์ฒ๋ฆฌ๋๋ค๊ฐ ๋ฐ๋ณต๋ฌธ์ ์ข ๋ฃํ๋ ๋น๊ต๋ฌธ์ ๋ง๋์ ์ ํํ์ฌ ๋ฐ๋ณต๋ฌธ์ ๋ฒ์ด๋๋๋ก ๊ตฌํ๋์ด ์๋ค.
loop:
mov al, [ecx]
mov [edx], al
inc ecx
inc edx
cmp al, โpโ
jnz short loop
๋ฆฌ๋ฒ์ฑ ๋ถ์ ์ค์ ์ด์ ๊ฐ์ ์ฝ๋๋ฅผ ๋ง๋๋ฉด inc์ cmp, jnz๋ฅผ ๋ณด๊ณ ๋๋ต ํ์ ์ด ๋๊ณ , jnz์์ ๋ค์ ์์ชฝ์ loop ๋ ์ด๋ธ๋ก ๊ฐ๊ฒ ๋์ด์๋ ๊ฒ์ด ์ ํํ ๋ฐ๋ณต๋ฌธ์ด๋ผ๋ ๊ฒ์ ์ดํดํ๊ฒ ํด์ค๋ค.
ECX์ EDX๋ ๋ฉ๋ชจ๋ฆฌ์์ ๋ฌธ์์ด์ ์ง์ ํ๋ ํฌ์ธํฐ์ด๊ณ , ECX๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด์์ EDX๊ฐ ๊ฐ๋ฆฌํค๋ ๋ฌธ์์ด๋ก ๋ณต์ฌ๊ฐ ์ผ์ด๋๊ณ ์๋ค๋ ๊ฒ์ ๋ณด๋ฉด ์ ์ ์๋ค. ๋ฐ๋ณต์ ํ ๋๋ง๋ค ํฌ์ธํฐ๊ฐ ๋ ๋ค 1์ฉ ์ฆ๊ฐ๋๊ณ , โpโ ๋ฌธ์์ด์ด ๋ํ๋ ๋๊น์ง ๋ณต์ฌ๋ฅผ ํ๋ ๊ฒ์ผ๋ก ์๊ฐํ ์ ์๋ค.
ํจ์์ ์ฌ์ฉ
ํจ์๋ ์์ํ๋ ๋ถ๋ถ๊ณผ ๋๋๋ ๋ถ๋ถ์ ํ์ ํ ์ ์๋ ๊ตฌ๋ถ์๊ฐ ์์ด์ ํ์ธ์ด ๊ทธ๋ฆฌ ์ด๋ ต์ง ์๋ค.
push ebp
mov ebp, esp
sub esp, 20
EBP ๊ฐ์ ์คํ์ ๋ฃ์ด๋๊ณ , ํ์ฌ ESP ๊ฐ์ EBP์ ๋์ ํ๊ณ , ์ง์ญ๋ณ์๋ฅผ ๋ง๋ค ๊ณต๊ฐ์ ํ๋ณดํ๊ธฐ ์ํด์ ESP ๊ฐ์ ๋ณ๊ฒฝํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋๋๋ ๋ถ๋ถ์ ํธ์ถ์ด ๋๋์ ๋ฆฌํด๋๊ธฐ ๋๋ฌธ์ RET๊ฐ ์ฐ์ด๊ฒ ๋๋ค.
mov eax, -1
mov esp, ebp
pop ebp
ret
์ด์ ๊ฐ์ด ESP๋ ์๋ ๊ฐ์ผ๋ก ๋์๊ฐ๊ณ , EBP๋ ์ ์ฅ๋์๋ ๊ฐ์ผ๋ก ๋ณต๊ตฌ๋๋ค. ๊ทธ๋ฐ ํ์ RET๋ฅผ ์ด์ฉํ์ฌ ํจ์๋ฅผ CALLํ๋ ๋ถ๋ถ์ผ๋ก ๋ค์ ๋์๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ eax์ -1์ ๋ฃ์ด์ ๊ฒฐ๊ณผ๊ฐ -1์ ํํํด์ฃผ๊ธฐ๋ ํ๋ค.
[์ถ์ฒ] ์ด์ ๋ธ๋ฆฌ์ด๋?|์์ฑ์ Zealous
'Security Study > Reversing' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Mobile Application Reverse Engineering: MARA (0) | 2016.12.16 |
---|---|
๋ฒ์ฉ ๋ ์ง์คํฐ(General Register) (0) | 2015.09.08 |
๋ฆฌ๋ฒ์ค ์์ง๋์ด๋ง์ด๋? (0) | 2015.09.03 |
๋ ์ง์คํฐ๋? (0) | 2015.09.03 |
๋๊ธ