Security Study/Reversing

์–ด์…ˆ๋ธ”๋ฆฌ์–ธ์–ด๋ž€?

๐“›๐“พ๐“ฌ๐“ฎ๐“ฝ๐“ฎ_๐“ข๐“ฝ๐“ฎ๐“ต๐“ต๐“ช 2015. 9. 3.
728x90
๋ฐ˜์‘ํ˜•

์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด

 


๋ฐ์ดํ„ฐ ํƒ€์ž…


ํƒ€์ž… ์„ค๋ช…

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

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€