๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ”ง ๋ฆฌ๋ฒ„์‹ฑ

๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง: ์–ด์…ˆ๋ธ”๋ฆฌ (๋ ˆ์ง€์Šคํ„ฐ, ์˜ต์ฝ”๋“œ)

by ๋ถˆํƒ€๋Š” ์ฐธ์ƒˆ 2023. 8. 2.

๊นŒ๋ง‰๋ˆˆ์ด๋‹ค.ใ‚ท

์ง€๊ธˆ๋ถ€ํ„ฐ ๋ณด์•ˆ ๊ด€๋ จ ๋™์•„๋ฆฌ ํ™œ๋™ ๋ฐ ์ฑ…์„ ํ†ตํ•ด ๋ฐฐ์šด ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง ๊ณต๋ถ€ ๋‚ด์šฉ์„ ๊ธฐ๋กํ•˜๊ณ ์ž ํ•œ๋‹ค.

์˜ค๋Š˜์€ ๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง์— ํ•„์š”ํ•œ ์–ด์…ˆ๋ธ”๋ฆฌ ๊ด€๋ จ ์ง€์‹์„ ์ •๋ฆฌํ–ˆ๋‹ค.

'๊ฐ•๋ณ‘ํƒใ€Ž๋ฆฌ๋ฒ„์Šค ์—”์ง€๋‹ˆ์–ด๋ง ๋ฐ”์ด๋ธ”: ์ฝ”๋“œ ์žฌ์ฐฝ์กฐ์˜ ๋ฏธํ•™ใ€, ์œ„ํ‚ค๋ถ์Šค, 2014, 1p-127p.'์„ ์ฐธ๊ณ ํ–ˆ๋‹ค.

๋‚ด์šฉ์€ ์–ด์…ˆ๋ธ”๋ฆฌ ์–ธ์–ด ๊ตฌ์กฐ, ๋ ˆ์ง€์Šคํ„ฐ, ์˜ต์ฝ”๋“œ, ์Šคํƒ ์‚ฌ์šฉ ์‹œ ์ฝ”๋“œ ์ˆœ์„œ์ด๋‹ค.

 

์–ด์…ˆ๋ธ”๋ฆฌ์˜ ์–ธ์–ด ๊ตฌ์กฐ

 

์–ด์…ˆ๋ธ”๋ฆฌ๋Š” ํ•œ ๋ฒˆ์— ํ•œ ๊ฐ€์ง€ ๋™์ž‘๋ฐ–์— ํ•˜์ง€ ๋ชปํ•œ๋‹ค

์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ์ธ IA-32์˜ ๊ธฐ๋ณธ ํ˜•ํƒœ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

"๋ช…๋ น์–ด(์˜ต์ฝ”๋“œ, opcode) + ์ธ์ž(์˜คํผ๋žœ๋“œ,operand)"

์˜คํผ๋žœ๋“œ๊ฐ€ ๋‘ ๊ฐœ์ผ ๋•Œ ์•ž์˜ ์˜คํผ๋žœ๋“œ๋ฅผ destination(des), ๋’ค์˜ ์˜คํผ๋žœ๋“œ๋ฅผ source(src)๋กœ ๋ถ€๋ฅธ๋‹ค.

 

 

๋ ˆ์ง€์Šคํ„ฐ

 

๋ ˆ์ง€์Šคํ„ฐ๋ž€ ๋ฐ์ดํ„ฐ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ €์žฅํ•˜๋Š” ๊ธฐ์–ต์žฅ์น˜์ด๋‹ค.

๋ณต์žกํ•˜๋‹ค๋ฉด ์–ด์…ˆ๋ธ”๋ฆฌ์—์„œ๋Š” ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ CPU๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” '๋ณ€์ˆ˜'๋กœ ์ƒ๊ฐํ•˜๋ฉด ์ดํ•ด๊ฐ€ ์‰ฝ๋‹ค.

๋ ˆ์ง€์Šคํ„ฐ์—๋Š” ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ, ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ, ํ”Œ๋ž˜๊ทธ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ์žˆ๋‹ค.

 

 1. ๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ

 

๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ๋ž€ ์ž‘์€ ๋ฐ์ดํ„ฐ์˜ ์ž„์‹œ ๊ณต๊ฐ„์ด๋‹ค.

EAX๋ถ€ํ„ฐ EDX๊นŒ์ง€๋Š” ์ฃผ๋กœ ์—ฐ์‚ฐ์„ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๊ทธ ์™ธ์—๋„ ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜๋ฉฐ, ์ปดํ“จํ„ฐ ์žฅ์น˜๋ฅผ ์ œ์–ดํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ์—๋Š” ์—ฌ๋Ÿฌ ์ข…๋ฅ˜๊ฐ€ ์žˆ์ง€๋งŒ ์•„๋ž˜ 8๊ฐœ๊ฐ€ ์ž์ฃผ ๋“ฑ์žฅํ•œ๋‹ค. 

 

๋ฒ”์šฉ ๋ ˆ์ง€์Šคํ„ฐ ์ด๋ฆ„(์ธ์ž) ์—ญํ• 
EAX A: Accumulator, ์‚ฐ์ˆ ๊ฐ’ ๊ณ„์‚ฐ, ๋ฆฌํ„ด๊ฐ’ ์ „๋‹ฌ (๊ฐ€์žฅ ๋งŽ์ด ์“ฐ๋Š” ๋ณ€์ˆ˜) 
EBX ์—ฌ๋ถ„์˜ ๋ ˆ์ง€์Šคํ„ฐ, ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๊ฑฐ EAX, EDX, ECX๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ ์‚ฌ์šฉ
ECX C: Count, ๋ฃจํ”„๋ฌธ์„ ์ˆ˜ํ–‰ํ•  ๋•Œ ์นด์šดํŒ… ํ•˜๋Š” ์—ญํ• 
EDX D: Data, EAX์™€ ์—ญํ• ์€ ๊ฐ™๋˜, ๋ฆฌํ„ด ๊ฐ’์˜ ์šฉ๋„๋กœ๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ. ๊ฐ์ข… ์—ฐ์‚ฐ์— ์“ฐ์ž„
ESI Source Index (์‹œ์ž‘์ง€ ์ธ๋ฑ์Šค)
๋ฌธ์ž์—ด์ด๋‚˜ ๊ฐ์ข… ๋ฐ˜๋ณต ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌ ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์˜ฎ๊ธฐ๋Š” ๋ฐ ์‚ฌ์šฉ
EDI Destination Index (๋ชฉ์ ์ง€ ์ธ๋ฑ์Šค)
ESI์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฝ์–ด EDI๋กœ ๋ณต์‚ฌํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๊ฐ„๋‹จ
EBP Base Pointer (๋ฒ ์ด์Šค ํฌ์ธํ„ฐ)
์Šคํƒํ”„๋ ˆ์ž„์˜ ์‹œ์ž‘ ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋จ, ์Šคํƒํ”„๋ ˆ์ž„ ๋™์•ˆ ๊ฐ’์ด ๋ณ€ํ•˜์ง€ ์•Š์Œ
ESP Stack Pointer (์Šคํƒ ํฌ์ธํ„ฐ)
์Šคํƒํ”„๋ ˆ์ž„์˜ ๋ ์ง€์  ์ฃผ์†Œ๊ฐ€ ์ €์žฅ๋จ, ์Šคํƒํ”„๋ ˆ์ž„ ๋™์•ˆ ๊ฐ’์ด ๋ณ€ํ•จ

 

* ๊ฒฝ์šฐ์— ๋”ฐ๋ผ al, ah ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ๋ณด์ด๋Š”๋ฐ 16๋น„ํŠธ ๋ ˆ์ง€์Šคํ„ฐ๋กœ ํฌ๊ธฐ๊ฐ€ ๋ฐ˜ ์ •๋„ ์ž‘์•„์กŒ๋‹ค ์ƒ๊ฐํ•˜๋ฉด ์‰ฝ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด EAX์— 0x78563412๋ผ๋Š” ๋ณ€์ˆ˜๊ฐ€ ๋‹ด๊ฒจ ์žˆ์„ ๋•Œ, mov ah, byte ptr ds:[esi]๊ฐ€ ์‹คํ–‰๋˜๋ฉด

ah์— ํ•ด๋‹นํ•˜๋Š” ์œ„์น˜์ธ 34๊ฐ€ ESI์— ๋‹ด๊ธด ๊ฐ’์ธ 83์œผ๋กœ ๋ณ€๊ฒฝ๋œ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ์„ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.

 

RAX๋Š” 64๋น„ํŠธ, EAX๋Š” 32๋น„ํŠธ(4๋ฐ”์ดํŠธ), AX๋Š” 16๋น„ํŠธ(2๋ฐ”์ดํŠธ), AH, AL์€ 8๋น„ํŠธ(1๋ฐ”์ดํŠธ)

 

*EBP์™€ ESP์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ์— ์ •๋ฆฌํ•  ํ•จ์ˆ˜ ๊ตฌ์กฐ ํŒŒํŠธ์—์„œ ์ž์„ธํ•˜๊ฒŒ ๋‹ค๋ฃจ๊ฒ ๋‹ค.

 

2. ์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ

 

์„ธํฌ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์ €์žฅ๊ณต๊ฐ„(๋ฉ”๋ชจ๋ฆฌ)์˜ ์˜์—ญ์— ๋Œ€ํ•œ ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•œ๋‹ค.

 

์„ธ๊ทธ๋จผํŠธ ๋ ˆ์ง€์Šคํ„ฐ ์ด๋ฆ„(์ธ์ž) ์—ญํ• 
CS ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ ์‹œ์ž‘ ์ฃผ์†Œ
DS ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ ์‹œ์ž‘ ์ฃผ์†Œ
SS ์Šคํƒ ์„ธ๊ทธ๋จผํŠธ ์‹œ์ž‘ ์ฃผ์†Œ
ES ์ถ”๊ฐ€๋กœ ์‚ฌ์šฉ๋œ ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ ์‹œ์ž‘ ์ฃผ์†Œ
FS, GS ์—ฌ๋ถ„ ๋ ˆ์ง€์Šคํ„ฐ

 

3. ํ”Œ๋ž˜๊ทธ ๋ ˆ์ง€์Šคํ„ฐ

 

ํ”Œ๋ž˜๊ทธ ๋ ˆ์ง€์Šคํ„ฐ๋Š” ์‚ฐ์ˆ  ์—ฐ์‚ฐ ๊ฒฐ๊ณผ์˜ ์ƒํƒœ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” ํ”Œ๋ž˜๊ทธ ๋น„ํŠธ๋ฅผ ์ €์žฅํ•œ๋‹ค. ๋ถ„๊ธฐ๋ฅผ ์ •ํ•  ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค.

 

ํ”Œ๋ž˜๊ทธ ๋ ˆ์ง€์Šคํ„ฐ ์ด๋ฆ„(์ธ์ž) ์—ญํ• 
ZF ์ œ๋กœ ํ”Œ๋ž˜๊ทธ. ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ 0์ผ ๊ฒฝ์šฐ ์ฐธ.
CF ์บ๋ฆฌ ํ”Œ๋ž˜๊ทธ. ๋ถ€ํ˜ธ ์—†๋Š” ์ˆซ์ž์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋น„ํŠธ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„ฐ์„ ๊ฒฝ์šฐ ์ฐธ.
AF ๋ณด์กฐ ์บ๋ฆฌ ํ”Œ๋ž˜๊ทธ. ์—ฐ์‚ฐ ๊ฒฐ๊ณผ ํ•˜์œ„ 4bit์—์„œ ๋น„ํŠธ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„ฐ์„ ๊ฒฝ์šฐ ์ฐธ.
OF ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ ํ”Œ๋ž˜๊ทธ. ๋ถ€ํ˜ธ ์žˆ๋Š” ์ˆซ์ž์˜ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ๋น„ํŠธ ๋ฒ”์œ„๋ฅผ ๋„˜์–ด์„ฐ์„ ๊ฒฝ์šฐ ์ฐธ.
SF ์‚ฌ์ธ ํ”Œ๋ž˜๊ทธ. ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ ์ฐธ.
PF ํŒจ๋ฆฌํ‹ฐ ํ”Œ๋ž˜๊ทธ. ์—ฐ์‚ฐ ๊ฒฐ๊ณผ์—์„œ 1๋กœ ๋œ ๋น„ํŠธ์˜ ์ˆ˜๊ฐ€ ์ง์ˆ˜์ผ ๊ฒฝ์šฐ ์ฐธ.
DF ๋””๋ ‰์…˜ ํ”Œ๋ž˜๊ทธ. ๋ฌธ์ž์—ด ์กฐ์ž‘์—์„œ ์ฐธ์ผ ๊ฒฝ์šฐ ์ฃผ์†Œ ์ฃผ์†Œ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์ด ๊ฐ์†Œ, ๊ฑฐ์ง“์ผ ๊ฒฝ์šฐ ์ฆ๊ฐ€.
TF ํŠธ๋žฉ ํ”Œ๋ž˜๊ทธ. ์ฐธ์ผ ๊ฒฝ์šฐ ํ•œ ๋ช…๋ น์ด ์‹คํ–‰๋  ๋•Œ๋งˆ๋‹ค ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ. ๋””๋ฒ„๊น…์— ์‚ฌ์šฉ.

 


์˜ต์ฝ”๋“œ

 

์•ž์„œ ์–ด์…ˆ๋ธ”๋ฆฌ์˜ ๊ธฐ๋ณธ ๊ตฌ์กฐ๊ฐ€ '๋ช…๋ น์–ด(์˜ต์ฝ”๋“œ, opcode) + ์ธ์ž(์˜คํผ๋žœ๋“œ, operand)'๋กœ ์ด๋ฃจ์–ด์กŒ๋‹ค๊ณ  ํ–ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์˜ต์ฝ”๋“œ ์ฆ‰ ๋ช…๋ น์–ด๋Š” ๊ทธ ์ข…๋ฅ˜๊ฐ€ ์•„์ฃผ ๋งŽ๋‹ค. ๋ชจ๋“  ์˜ต์ฝ”๋“œ๋ฅผ ๋‹ค ์™ธ์šธ ์ˆ˜๋Š” ์—†๋‹ค.

์•„๋ž˜ ์ž์ฃผ ์“ฐ์ด๋Š” ์˜ต์ฝ”๋“œ๋งŒ ๋จธ๋ฆฌ์— ๋„ฃ์–ด๋‘๊ณ  ๋‚˜๋จธ์ง€๋Š” ๊ทธ๋•Œ๊ทธ๋•Œ ์ฐพ์•„๋ณด๋ฉฐ ๊ณต๋ถ€ํ•˜์ž.

 

  • PUSH, POP: PUSH๋Š” ์Šคํƒ์— ๊ฐ’์„ ๋„ฃ๋Š” ๊ฒƒ, POP์€ ์Šคํƒ์— ์žˆ๋Š” ๊ฐ’์„ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์ด๋‹ค.

* ์Šคํƒ์€ ์ž๋ž€๋‹ค. ์ฆ‰, ๋†’์€ ์ฃผ์†Œ์—์„œ ๋‚ฎ์€ ์ฃผ์†Œ๋กœ ์ปค์ง„๋‹ค.( LIFO:Last In First Out) ๋”ฐ๋ผ์„œ POP์˜ ๊ฒฝ์šฐ ์Šคํƒ์—์„œ ๊ฐ’์„ ๊ฐ€์ ธ์˜จ๋‹ค๋Š” ๊ฒƒ์€ ๊ฐ€์žฅ ์ตœ๊ทผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋นผ๋‚ธ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

  • MOV, LEA:  MOV๋Š” ์•ž์˜ ์ธ์ž์— ๋’ค์˜ ์ธ์ž ๊ฐ’์„ ๋„ฃ๋Š” ๊ฒƒ, LEA๋Š” ์ฃผ์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์˜ต์ฝ”๋“œ์ด๋‹ค. 

* ์˜ˆ๋ฅผ ๋“ค์–ด MOV eax, 1์ด๋ฉด eax์— 1์„ ๋„ฃ๋Š” ์ฝ”๋“œ์ด๋‹ค. LEA๋Š” MOV์™€ ํ—ท๊ฐˆ๋ฆด ์ˆ˜ ์žˆ๋Š”๋ฐ ์ฃผ์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”, ์ฆ‰ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ด LEA์ด๋‹ค.

 

  • ADD,SUB: ์„ค๋ช…์ด ํ•„์š” ์—†๋Š” ๋“ฏํ•˜๋‹ค. ๋”ํ•˜๊ณ  ADD๋Š” ๋”ํ•˜๋Š” ์˜ต์ฝ”๋“œ, SUB๋Š” ๋นผ๋Š” ์˜ต์ฝ”๋“œ์ด๋‹ค.

 

  • INT: ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ ์ผ์œผํ‚ค๋Š” ๋ช…๋ น์–ด์ด๋‹ค. INT๋ผ๋Š” ์˜ต์ฝ”๋“œ ๋’ค์— ์˜คํผ๋žœ๋“œ๋กœ ์–ด๋–ค ๊ฒƒ์ด ์˜ค๋А๋ƒ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋œ๋‹ค.

 

  • CALL: ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋ช…๋ น์–ด์ด๋‹ค, ์˜คํผ๋žœ๋“œ๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ์— ํ•„์š”ํ•œ ๋ฒˆ์ง€๊ฐ€ ๋ถ™๋Š”๋‹ค.

 

  • INC, DEC: C์–ธ์–ด์—์„œ ๊ฐ๊ฐ i++, i--์„ ๋œปํ•œ๋‹ค. ๊ฐ๊ฐ ์ธ์ž๋ฅผ 1์”ฉ ์ฆ๊ฐ€ํ•˜๊ณ  1์”ฉ ๊ฐ์†Œํ•˜๋Š” ์˜ต์ฝ”๋“œ์ด๋‹ค. 

 

  • AND, OR, XOR: des(์•ž์˜ ์ธ์ž)์™€ src(๋’ค์˜ ์ธ์ž)๋ฅผ ๊ฐ๊ฐ AND, OR, XOR ์—ฐ์‚ฐํ•œ๋‹ค.

* des์™€ src๋ฅผ ๋™์ผํ•œ ์˜คํผ๋žœ๋“œ๋กœ ๋‘˜ ์ˆ˜๋„ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด XOR EAX, EAX๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด EAX๊ฐ€ 0์ด  ๋œ๋‹ค.

 

  • NOP: ์•„๋ฌด๊ฒƒ๋„ ํ•˜์ง€ ๋ง๋ผ๋Š” ๋ช…๋ น์–ด์ด๋‹ค. ๋ณด์•ˆ ๋ฐ ํ•ดํ‚น์— ์ž์ฃผ ์“ฐ์ธ๋‹ค.

 

์•„๋ž˜ ์˜ต์ฝ”๋“œ๋“ค์€ ๋ชจ๋‘ ํ”Œ๋ž˜๊ทธ ๋ ˆ์ง€์Šคํ„ฐ์˜ ๊ฐ’์„ ๋ณ€ํ™”์‹œํ‚ค๋Š” ์˜ต์ฝ”๋“œ์ด๋‹ค.

์ฆ‰ ๋ถ„๊ธฐ๋ฌธ์—์„œ ์ฃผ๋กœ ์“ฐ์ด๋Š” ์˜ต์ฝ”๋“œ๋“ค์ด๋‹ค.

 

  • CMP, TEST, JMP: ๋น„๊ตํ•ด์„œ ์ ํ”„ํ•˜๋Š” ๋ช…๋ น์–ด๋“ค์ด๋‹ค.

 * CMP๋Š” des์™€ src ๋นผ์„œ ๋น„๊ต, TEST๋Š” AND ์—ฐ์‚ฐ์œผ๋กœ ๋น„๊ต,  JMP๋Š” ๋’ค์— ์˜คํผ๋žœ๋“œ ์ฃผ์†Œ๋กœ ์กฐ๊ฑด ์—†์ด ์ด๋™ํ•œ๋‹ค.

 

  • JE, JNE: JE๋Š” ZF๊ฐ€ 0์ด๋ฉด ํŠน์ •์ฃผ์†Œ๋กœ, 1์ด๋ฉด ๋˜ ๋‹ค๋ฅธ ํŠน์ • ์ฃผ์†Œ๋กœ ์ ํ”„ํ•œ๋‹ค(๋ถ„๊ธฐ), JNE๋Š” JE์™€ ๋ฐ˜๋Œ€์ด๋‹ค.

 

  • JA, JB: ๊ฐ๊ฐ ์˜คํผ๋žœ๋“œ 1์ด ๋” ํด ๋•Œ ์ ํ”„, ์˜คํผ๋žœ๋“œ 2๊ฐ€ ๋” ํด ๋•Œ ์ ํ”„ํ•˜๋Š” ์˜ต์ฝ”๋“œ์ด๋‹ค.

 

  • JAE, JBE: ๊ฐ๊ฐ ์˜คํผ๋žœ๋“œ 1์ด ๋” ํฌ๊ฑฐ๋‚˜ ๊ฐ™์„ ๋•Œ ์ ํ”„, ์˜คํผ๋žœ๋“œ 2๊ฐ€ ๋” ํฌ๊ฑฐ๋‚˜ ๊ฐ™์„ ๋•Œ ์ ํ”„ (๋นผ์„œ ์—ฐ์‚ฐ๊ฒฐ๊ณผ๊ฐ€ ์–‘์ˆ˜์ผ ๋•Œ)

 

 

4. ์Šคํƒ ์‚ฌ์šฉ ์‹œ ๋ณด์ด๋Š” ์ฝ”๋“œ

 

์Šคํƒ์„ ์‚ฌ์šฉํ•  ๋•Œ ์–ด์…ˆ๋ธ”๋ฆฌ์—์„œ๋Š” ์–ด๋–ค ์ฝ”๋“œ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š”์ง€์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด๋‹ค.

๋‹ค์Œ ์ •๋ฆฌ ๋‚ด์šฉ์ธ ํ•จ์ˆ˜ ํ˜ธ์ถœ์—์„œ ๋” ์ž์„ธํžˆ ๋‹ค๋ฃจ๊ฒ ์ง€๋งŒ ์˜ต์ฝ”๋“œ์™€ ๋ ˆ์ง€์Šคํ„ฐ ๋ณต์Šต ์ฐจ์›์—์„œ ์ •๋ฆฌํ–ˆ๋‹ค.

์•„๋ž˜๋Š” ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ๋กœ ๋ฐ”๋€” C์–ธ์–ด ์ฝ”๋“œ์ด๋‹ค.

 

int Plus(int a, int b)
{
	return a+b;
}

 

์•„๋ž˜๋Š” ์œ„์— ์ž‘์„ฑํ•œ ์ฝ”๋“œ์—์„œ ๋”ํ•˜๋Š” ์—ฐ์‚ฐ์„ ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ์ด๋‹ค.

์ž์„ธํ•œ ์„ค๋ช…์€ ์ฃผ์„์„ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.

 

mov eax, dword ptr ss:[esp+8] // STACK ์˜์—ญ์— esp+8 ์ฃผ์†Œ์— ์ ‘๊ทผํ•˜์—ฌ 4๋ฐ”์ดํŠธ ๋งŒํผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ eax์— ์ €์žฅํ•œ๋‹ค๋Š” ์˜๋ฏธ
mov ecx, dword ptr ss:[esp+8] // ์œ„์˜ ํŒŒ๋ผ๋ฏธํ„ฐ b๋ฅผ ์ €์žฅํ–ˆ๋“ฏ ํŒŒ๋ผ๋ฏธํ„ฐ a ์ €์žฅ
add eax, ecx ๋ฉ”๋ชจ๋ฆฌ๋ผ๋ฆฌ๋Š” ์—ฐ์‚ฐํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ๋ ˆ์ง€์Šคํ„ฐ์— ๊ฐ’์„ ๋‹ด์•„ add ์—ฐ์‚ฐ, ์—ฐ์‚ฐ๊ฐ’์€ eax์— ์ €์žฅ
retn

 

์•„๋ž˜๋Š” ์œ„์— ์ž‘์„ฑํ•œ ์ฝ”๋“œ์—์„œ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํ•„์š”ํ•œ STACK ์˜์—ญ์„ ํ™•๋ณดํ•˜๊ธฐ ์œ„ํ•œ ์–ด์…ˆ๋ธ”๋ฆฌ ์ฝ”๋“œ์ด๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ž์„ธํ•œ ์„ค๋ช…์€ ์ฃผ์„์„ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.

 

push ebp //ebp ๋ ˆ์ง€์Šคํ„ฐ๋ฅผ ์Šคํƒ์— ๋„ฃ์Œ
mov ebp, esp //ํ˜„์žฌ esp ๊ฐ’์„ ebp์— ๋„ฃ์Œ
sub esp, 50h //50h๋งŒํผ์„ esp์—์„œ ๋บŒ, 50๋งŒํผ์˜ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ
(์Šคํƒ์€ ์•„๋ž˜๋กœ ์ž๋ผ๋ฏ€๋กœ ๊ฐ’์„ ๋บ€๋‹ค๋Š” ๊ฒƒ์€ ๊ณง ๊ทธ๋งŒํผ ์Šคํƒ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋œป)

 

์œ„์˜ ์ฃผ์„ ๋‚ด์šฉ์— ๋”ํ•˜์—ฌ ์„ค๋ช…ํ•˜๋ฉด,

์šฐ์„  ebp๊ฐ€ ์Šคํƒ์˜ ๋งจ ์œ„์—์„œ ์Šคํƒ์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋ฅผ ๋ฐ›๊ณ  esp๋ฅผ ํ†ตํ•ด ์‚ฌ์ด์ฆˆ๋ฅผ ๋นผ๊ฐ€๋ฉฐ ์ž๋ฆฌ๋ฅผ ํ™•๋ณดํ•œ๋‹ค.

4๋ฐ”์ดํŠธ๋กœ ์›€์ง์ด๋Š” ๋ณ€์ˆ˜์ผ ๋•Œ ebp-4์ด๋ฉด ์ฒซ ๋ฒˆ์งธ ์ง€์—ญ๋ณ€์ˆ˜, ebp-8์ด๋ฉด ๋‘ ๋ฒˆ์งธ ์ง€์—ญ๋ณ€์ˆ˜์˜ ๊ณต๊ฐ„์ด ๋œ๋‹ค.

 

์•„๋ž˜๋Š” ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์ถ”๊ฐ€๋กœ ๊ถ๊ธˆํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ ์ •๋ฆฌํ–ˆ๋‹ค.

 

๋”๋ณด๊ธฐ

*๋ฆฌํ‹€ ์—”๋””์–ธ: ๋น… ์—”๋””์–ธ๊ณผ ๋ฐ˜๋Œ€๋กœ ์˜ค๋ฅธ์ชฝ๋ถ€ํ„ฐ ๋ฐ”์ดํŠธ๋ฅผ ์ €์žฅํ•˜๋Š” ์ˆœ์„œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 0x12345678์ด๋ผ๋Š” DWORD ๊ฐ’์ด๋ฉด 78 56 34 12๋กœ ์ฝ๊ฒŒ ๋œ๋‹ค.

*DWORD word๋Š” 2๋ฐ”์ดํŠธ, dword๋Š” 4๋ฐ”์ดํŠธ, qword๋Š” 8๋ฐ”์ดํŠธ