728x90

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

ADD A B A์™€ B๋ฅผ ๋”ํ•œ ๊ฐ’์„ A์— ์ €์žฅ
SUB A B A์—์„œ B๋ฅผ ๋บ€ ๊ฐ’์„ A์— ์ €์žฅ
MUL A B A์™€ B๋ฅผ ๊ณฑํ•œ ๊ฐ’์„ A์— ์ €์žฅ
DIV A B A์™€ B๋ฅผ ๋‚˜๋ˆˆ ๊ฐ’์„ A์— ์ €์žฅ
MOV A B A์— B๋ฅผ ์ €์žฅ
JMP Addr Addr์ด ๊ฐ€๋ฆฌํ‚ค๋Š” ์ฃผ์†Œ๋กœ ์ด๋™
CALL Func Func ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰
CMP A B A์™€ B๋ฅผ ๋น„๊ตํ•ด ๊ฐ’์ด ๊ฐ™๋‹ค๋ฉด ZF ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ 1๋กœ ์„ธํŒ…, ๋‹ค๋ฅด๋ฉด 0์œผ๋กœ ์„ธํŒ…๋จ

 

  • JMP์™€ CALL์€ ๋‘˜ ๋‹ค ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰ ํ๋ฆ„์ด ๋ณ€๊ฒฝ๋˜๋‹ค๋Š” ๊ฒƒ์€ ๋™์ผํ•˜๋‚˜,
  • JMP๋Š” ํ•ด๋‹น ์ฃผ์†Œ๋กœ ๊ฐ€๋Š” ๊ฒƒ
  • CALL์€ ํ•ด๋‹น ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉฐ ์ด๋™ํ•œ ํ›„, ๋๋‚˜๋ฉด ์›๋ž˜ ์ฃผ์†Œ๋กœ ๋Œ์•„์˜ด

๋น„ํŠธ์—ฐ์‚ฐ์ž

 

๋น„ํŠธ ์‹œํ”„ํŠธ ์—ฐ์‚ฐ

  • SHL(Shift Left, ์™ผ์ชฝ ์‹œํ”„ํŠธ)
    • 5 << 2๋Š” ์ˆซ์ž 5๋ฅผ ์™ผ์ชฝ์œผ๋กœ 2๋ฒˆ ์‹œํ”„ํŠธ ํ•˜๋Š” ์—ฐ์‚ฐ
    • 5๋Š” 2์ง„์ˆ˜๋กœ 101์ด๋‹ค.
    • 101 << 2 = 10100
      • ์ฆ‰, 101์—์„œ ์™ผ์ชฝ์œผ๋กœ 2๋ฒˆ ์ด๋™ํ•˜์—ฌ, ๋นˆ์ž๋ฆฌ๋Š” 0์œผ๋กœ ์ฑ„์›Œ์ง„๋‹ค.
  • SHR(Shift Right, ์˜ค๋ฅธ์ชฝ ์‹œํ”„ํŠธ)
    • 6 >> 1์€ ์ˆซ์ž 6์„ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1๋ฒˆ ์‹œํ”„ํŠธ ํ•˜๋Š” ์—ฐ์‚ฐ
    • 6์€ 2์ง„์ˆ˜๋กœ 110์ด๋‹ค.
    • 110 >> 1 = 0011
      • ์ฆ‰, 110์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1๋ฒˆ ์ด๋™ํ•˜๋ฉฐ, ๋นˆ์ž๋ฆฌ๋Š” 0์œผ๋กœ ์ฑ„์›Œ์ง„๋‹ค.

๋ ˆ์ง€์Šคํ„ฐ

CPU

  • ์‹œ์Šคํ…œ์˜ ์ค‘์•™์—์„œ ๋ชจ๋“  ๊ณ„์‚ฐ๊ณผ ๋ช…๋ น ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹น
  • Interrupt line: ๊ฐ ์žฅ์น˜๋‚˜ ์ž‘์—…์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ธํ„ฐ๋ŸฝํŠธ๋ฅผ CPU๋กœ ์ „๋‹ฌํ•˜๋Š” ํ†ต๋กœ์ž…๋‹ˆ๋‹ค. ์ธํ„ฐ๋ŸฝํŠธ๋Š” CPU์˜ ์ž‘์—…์„ ์ž ์‹œ ๋ฉˆ์ถ”๊ณ  ์ฆ‰์‹œ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•  ์ž‘์—…์ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉ
  • Mode bit ๋ฐ Registers: CPU๋Š” ์—ฌ๋Ÿฌ ๋ชจ๋“œ์—์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Mode bit๋Š” CPU๊ฐ€ ํ˜„์žฌ ์–ด๋–ค ๋ชจ๋“œ(์‚ฌ์šฉ์ž ๋ชจ๋“œ ๋˜๋Š” ์ปค๋„ ๋ชจ๋“œ)๋กœ ์ž‘๋™ํ•˜๋Š”์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋ฉฐ, ๋ ˆ์ง€์Šคํ„ฐ๋Š” ๊ณ„์‚ฐ์— ํ•„์š”ํ•œ ์ž„์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณ ์† ๊ธฐ์–ต ์žฅ์น˜

Memory Controller (๋ฉ”๋ชจ๋ฆฌ ์ œ์–ด๊ธฐ)

  • CPU์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ„์˜ ๋ฐ์ดํ„ฐ ์ด๋™์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ์ค‘๊ฐ„์—์„œ ์กฐ์ •ํ•˜๋Š” ์—ญํ• 

Memory (๋ฉ”๋ชจ๋ฆฌ)

  • ์‹œ์Šคํ…œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์šด์˜ ์ฒด์ œ(OS)์™€ ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์„ ์ €์žฅ
  • CPU๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜จ๋‹ค

DMA Controller (์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์ œ์–ด๊ธฐ)

  • CPU๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š๊ณ ๋„ ๋ฉ”๋ชจ๋ฆฌ์™€ ์žฅ์น˜ ๊ฐ„์— ์ง์ ‘ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์žฅ์น˜์ž…๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด CPU๋Š” ๋‹ค๋ฅธ ์ž‘์—…์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๊ณ , ๋ฐ์ดํ„ฐ ์ „์†ก์€ ํšจ์œจ์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค
  • Timer๋Š” ์ž‘์—…์˜ ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๊ฑฐ๋‚˜ ์ผ์ • ์‹œ๊ฐ„ ์ดํ›„์— ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ

Device Controller (์žฅ์น˜ ์ œ์–ด๊ธฐ)

  • CPU์™€ ์ฃผ๋ณ€ ์žฅ์น˜(๋””์Šคํฌ, ํ”„๋ฆฐํ„ฐ, ํ‚ค๋ณด๋“œ, ๋ชจ๋‹ˆํ„ฐ ๋“ฑ) ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ค‘์žฌ
  • ๊ฐ๊ฐ์˜ ์žฅ์น˜์—๋Š” ๊ณ ์œ ์˜ Device controller๊ฐ€ ์žˆ๊ณ , ์ด๋ฅผ ํ†ตํ•ด ์žฅ์น˜๊ฐ€ CPU์˜ ๋ช…๋ น์„ ๋ฐ›์•„ ์‹คํ–‰

Disk, Printer, Monitor ๋“ฑ ์žฅ์น˜

  • Disk: ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณณ์œผ๋กœ, CPU์˜ ๋ช…๋ น์— ๋”ฐ๋ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์”๋‹ˆ๋‹ค.
  • Printer: CPU์˜ ๋ช…๋ น์— ๋”ฐ๋ผ ์ธ์‡„ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์žฅ์น˜์ž…๋‹ˆ๋‹ค.
  • Local buffer: ์žฅ์น˜ ์ œ์–ด๊ธฐ๋‚˜ ์ฃผ๋ณ€ ์žฅ์น˜๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ž„์‹œ๋กœ ์ €์žฅํ•˜๋Š” ๊ณต๊ฐ„์ž…๋‹ˆ๋‹ค. ์žฅ์น˜์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•˜๊ฑฐ๋‚˜ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • Monitor: ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ์žฅ์น˜์ž…๋‹ˆ๋‹ค.

1. ์‚ฐ์ˆ ์—ฐ์‚ฐ์— ์‚ฌ์šฉ๋˜๋Š” ๋ฒ”์šฉ๋ ˆ์ง€์Šคํ„ฐ

  • EAX (Extended Accumulator Register): ๊ณฑ์…ˆ๊ณผ ๋‚˜๋ˆ—์…ˆ ๋ช…๋ น์—์„œ ์ž๋™์œผ๋กœ ์‚ฌ์šฉ๋˜๊ณ  ํ•จ์ˆ˜์˜ ๋ฆฌํ„ด๊ฐ’์ด ์ €์žฅ๋˜๋Š” ์šฉ๋„๋กœ ์‚ฌ์šฉ → ์‚ฐ์ˆ  ์—ฐ์‚ฐ์— ์‚ฌ์šฉ
  • EBX (Extended Base Register): ESI๋‚˜ EDI์™€ ๊ฒฐํ•ฉํ•˜์—ฌ ์ธ๋ฑ์Šค์— ์‚ฌ์šฉ → ํŠน์ • ์ฃผ์†Œ ์ €์žฅ
  • ECX (Extended Counter Register): ๋ฐ˜๋ณต ๋ช…๋ น์–ด ์‚ฌ์šฉ ์‹œ ๋ฐ˜๋ณต ์นด์šดํ„ฐ๋กœ ์‚ฌ์šฉ → ์ˆซ์ž๋ฅผ ์นด์šดํ„ฐ ํ• ๋•Œ ์‚ฌ์šฉ๋˜๊ฑฐ๋‚˜, ๊ณ„์‚ฐํ•  ๋•Œ ์ž„์‹œ ์ €์žฅ
  • EDX (Extended Data Register): EAX์™€ ๊ฐ™์ด ์“ฐ์ด๋ฉฐ ๋ถ€ํ˜ธ ํ™•์žฅ ๋ช…๋ น ๋“ฑ์— ์‚ฌ์šฉ → ์ผ๋ฐ˜ ์ž๋ฃŒ ์ €์žฅ

 

2. ์ธ๋ฑ์Šค ๋ ˆ์ง€์Šคํ„ฐ

  • ์ธ๋ฑ์Šค๋กœ ์‚ฌ์šฉ, ๊ทธ ์™ธ์—๋„ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ์จ์˜ ์—ญํ• ๋„ ํ•œ๋‹ค.
  • RDI (Destination Index): ๋ฌธ์ž์—ด ๊ด€๋ จ instruction ์‚ฌ์šฉ ์‹œ, Destination
  • RSI (Extended Sorce Index): ๋ฌธ์ž์—ด ๊ด€๋ จ instruction ์‚ฌ์šฉ ์‹œ, Source

3. ํฌ์ธํ„ฐ ๋ ˆ์ง€์Šคํ„ฐ

  • RSP (Stack Point): ์Šคํƒํ”„๋ ˆ์ž„์—์„œ ์Šคํƒ์˜ ๋ ์ง€์  ์ฃผ์†Œ(ํ˜„์žฌ ์Šคํƒ ์ฃผ์†Œ)๊ฐ€ ์ €์žฅ๋œ๋‹ค.
    • ์ฆ‰, ๋ฐ์ดํ„ฐ๊ฐ€ ๊ณ„์† ์Œ“์ผ ๋•Œ ์Šคํƒ์˜ ๊ฐ€์žฅ ๋†’์€ ๊ณณ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
    • push, pop ๋ช…๋ น์„ ํ†ตํ•ด RSP ๊ฐ’์ด ์œ„์•„๋ž˜๋กœ 8๋ฐ”์ดํŠธ์”ฉ ์ด๋™ํ•˜๋ฉด์„œ ์Šคํƒํ”„๋ ˆ์ž„์˜ ํฌ๊ธฐ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฒŒ ๋œ๋‹ค.
  • RBP (Base Point): ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์Šคํƒํ”„๋ ˆ์ž„์ด ํ˜•์„ฑ๋˜๋Š”๋ฐ ์ด ์Šคํƒํ”„๋ ˆ์ž„์˜ ์‹œ์ž‘ ์ง€์  ์ฃผ์†Œ(์Šคํƒ ๋ณต๊ท€ ์ฃผ์†Œ)๊ฐ€ ์ €์žฅ๋œ๋‹ค.

๋””๋ฒ„๊ฑฐ

 


ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ตฌ์กฐ

  • ์ฝ”๋“œ ์„ธ๊ทธ๋จผํŠธ: CPU์—์„œ ์‹คํ–‰๋˜๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋‹ด๊ณ  ์žˆ์Œ
  • ๋ฐ์ดํ„ฐ ์„ธ๊ทธ๋จผํŠธ
    • ๋ฌธ์ž์—ด ์ƒ์ˆ˜ ๋ชฉ๋ก: ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋‹ค๊ฐ€ ํฐ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์€ ๋ฌธ์ž์—ด์„ ๋‹ด๊ณ  ์žˆ๋Š” ๊ณต๊ฐ„
    • ์ „์—ญ ๋ณ€์ˆ˜: ํ•จ์ˆ˜ ์™ธ ๋ฐ”๊นฅ์—์„œ ์„ ์–ธํ•œ ๋ณ€์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„
    • static ๋ณ€์ˆ˜: ์ „์—ญ ๋ณ€์ˆ˜์˜ ํŠน์„ฑ๊ณผ ์ง€์—ญ ๋ณ€์ˆ˜์˜ ํŠน์„ฑ์„ ๊ณ ๋ฃจ ๊ฐ–์ถ˜ static์œผ๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„
  • ์—‘์ŠคํŠธ๋ผ ์„ธ๊ทธ๋จผํŠธ
    • ํž™ (Heap): ๋™์  ํ• ๋‹น์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›์•˜์„ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๊ณต๊ฐ„
    • ์Šคํƒ (Stack): ์ฝ”๋“œ ์ƒ์— ๋“œ๋Ÿฌ๋‚˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ(๋ณ€์ˆ˜ ๋“ฑ)๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„

#include <stdio.h> 

void funcA(int v){ 
	printf("%d\n", b); 
} 

void funcB(int* v){ 
	printf("%d\n", *v); 
} 

int main(void){ 
	int num; num = 5; 
	funcA(num); 
	num = 13; 
	funcB(&num); 
	return 0; 
}
  • ๊ฐ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์Šคํƒ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ
    • ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ์Šคํƒ์— ์ƒˆ๋กœ์šด ์ •๋ณด๊ฐ€ ์Œ“์ธ๋‹ค.
    • ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋ฉด ์Šคํƒ์—์„œ ๊ทธ ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์ œ๊ฑฐ๋œ๋‹ค.
  • ์Šคํƒ ๊ตฌ์กฐ์˜ ๊ณ„์ธต
    • ์ƒ์œ„์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€์žฅ ์ตœ๊ทผ์— ์ถ”๊ฐ€๋œ ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.
    • ์Šคํƒ์˜ ๋‚ด์šฉ์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ˆœ์„œ๋Œ€๋กœ ๊ด€๋ฆฌ๋˜๋ฉฐ, ๊ฐ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ ๊ทธ์— ๊ด€๋ จ๋œ ์ •๋ณด(๋งค๊ฐœ๋ณ€์ˆ˜, ๋ฐ˜ํ™˜ ์ฃผ์†Œ ๋“ฑ)๊ฐ€ ์Šคํƒ์— ์ €์žฅ๋œ๋‹ค.
  • ๊ตฌ์ฒด์ ์ธ ์Šคํƒ ๋™์ž‘
    • main() ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋  ๋•Œ, main ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์Šคํƒ์— ์Œ“์ธ๋‹ค.
    • funA(num) ํ˜ธ์ถœ ์‹œ, funA ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด์™€ ๋งค๊ฐœ๋ณ€์ˆ˜ int v๊ฐ€ ์Šคํƒ์— ์ €์žฅ๋œ๋‹ค.
    • funB(&num) ํ˜ธ์ถœ ์‹œ, funB ํ•จ์ˆ˜์— ๋Œ€ํ•œ ์ •๋ณด์™€ ๋งค๊ฐœ๋ณ€์ˆ˜ int* v๊ฐ€ ์ €์žฅ๋œ๋‹ค.
  • ์Šคํƒ์—์„œ์˜ ๋ณ€์ˆ˜ ์ฒ˜๋ฆฌ
    • funcA๋Š” num์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•˜์—ฌ ์Šคํƒ์— ์ €์žฅํ•˜๊ณ , ๊ฐ’์„ ์ง์ ‘ ์ถœ๋ ฅํ•œ๋‹ค.
    • funcB๋Š” num์˜ ์ฃผ์†Œ๋ฅผ ์ „๋‹ฌ๋ฐ›์•„ ๊ทธ ์ฃผ์†Œ์— ์ €์žฅ๋œ ๊ฐ’์„ ์—ญ์ฐธ์กฐ(*v)ํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.
  • ์ฝ”๋“œ ์‹คํ–‰ ํ๋ฆ„
    • funcA(num)์—์„œ๋Š” num์˜ ๊ฐ’(5)์ด ์Šคํƒ์— ์ €์žฅ๋˜๊ณ  ์ถœ๋ ฅ๋œ๋‹ค.
    • funcB(&num)์—์„œ๋Š” num์˜ ์ฃผ์†Œ๊ฐ€ ์Šคํƒ์— ์ €์žฅ๋˜๋ฉฐ, ๊ทธ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐํ•ด 13์ด๋ผ๋Š” ๊ฐ’์ด ์ถœ๋ ฅ๋œ๋‹ค.

ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ทœ์•ฝ

  • ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๊ธฐ ์ „, ํ•จ์ˆ˜์— ์ „๋‹ฌ๋  ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์Šคํƒ์— ์ €์žฅ๋œ๋‹ค.
  • ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ณ  ๋‚˜๋ฉด, ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์—ฌ์ „ํžˆ ์Šคํƒ์— ๋‚จ์•„์žˆ์ง€๋งŒ, ์ดํ›„์˜ ์Šคํƒ ์‚ฌ์šฉ์— ์˜ํ•ด ๋ฎ์–ด์“ฐ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰๊ณผ ๋™์‹œ์— ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๊ฐ ํ”„๋กœ๊ทธ๋žจ๋งˆ๋‹ค ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •๋˜๋ฉฐ, ์ด ํฌ๊ธฐ ๋‚ด์—์„œ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜๊ฐ€ ๋๋‚œ ํ›„์—๋„ ์Šคํƒ์— ์žˆ๋˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์‚ฌ๋ผ์ง€์ง€ ์•Š๊ณ  ๋‚จ์•„์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋งŒ, ๋‹ค์Œ ๋ฒˆ์— ์Šคํƒ์— ์ƒˆ๋กœ์šด ๊ฐ’์ด ์ €์žฅ๋  ๋•Œ ๋ฎ์–ด์“ฐ์—ฌ์„œ ์‚ฌ๋ผ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์Šคํƒ์ด LIFO(Last In, First Out) ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ESP(Extended Stack Pointer)๋Š” ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ „์˜ ์œ„์น˜๋กœ ๋ณต์›๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ESP๋Š” ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋กœ, ํ•จ์ˆ˜๊ฐ€ ๋๋‚˜๋ฉด ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ „์— ์žˆ๋˜ ์œ„์น˜๋กœ ๋Œ์•„์™€์•ผ ์ •์ƒ์ ์œผ๋กœ ์Šคํƒ์„ ๊ณ„์† ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋งŒ์•ฝ ESP๊ฐ€ ๋ณต์›๋˜์ง€ ์•Š์œผ๋ฉด ์Šคํƒ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ผฌ์ด๊ฒŒ ๋˜์–ด ๋” ์ด์ƒ ์Šคํƒ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ทœ์•ฝ์€ ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ ์–ด๋–ป๊ฒŒ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๊ณ , ESP๋ฅผ ๋ณต์›ํ•  ์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ๊ทœ์น™์ž…๋‹ˆ๋‹ค. ์ด ๊ทœ์น™์— ๋”ฐ๋ผ ์Šคํƒ์˜ ๊ด€๋ฆฌ ๋ฐฉ์‹์ด ๋‹ฌ๋ผ์ง‘๋‹ˆ๋‹ค.


cdecl

ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ caller์ธ mainํ•จ์ˆ˜๊ฐ€ ์ž์‹ ์ด ์Šคํƒ์— ์ž…๋ ฅํ•œ ํ•จ์ˆ˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ง์ ‘ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ์‹

stdcall

ํ˜ธ์ถœ๋œ callee์ธ addํ•จ์ˆ˜๊ฐ€ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์Šคํƒ์„ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ์‹(cdecl์— ๋น„ํ•ด ์ฝ”๋“œ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„์ง)

 

fastcall

๊ธฐ๋ณธ์ ์œผ๋กœ ๋™์ผํ•˜๋‚˜, ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ์˜ ์ผ๋ถ€(2๊ฐœ๊นŒ์ง€)๋ฅผ ์Šคํƒ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์•„๋‹Œ ๋ ˆ์ง€์Šคํ„ฐ๋กœ ์ „๋‹ฌํ•จ

(์–ด๋–ค ํ•จ์ˆ˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๊ฐ€ 4๊ฐœ์ผ ๊ฒฝ์šฐ, ์•ž ๋‘ ๊ฐœ๋Š” ๊ฐ๊ฐ ECX, EDX ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „๋‹ฌํ•จ)

 

thiscall

๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์Šคํƒ์œผ๋กœ ์ €์žฅํ•˜๊ณ , this ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด ๊ทธ๊ฒƒ๋“ค์„ ์—ฐ๊ฒฐํ•˜๋Š” ๋ฐฉ์‹

this ํฌ์ธํ„ฐ๋Š” ecx์— ์ €์žฅ๋จ. ๋‚˜๋จธ์ง€ ๊ทœ์น™์€ stdcall๊ณผ ๋™์ผํ•จ

'EVI$ION > ์ธ๊ณต์ง€๋Šฅ ์•…์„ฑ์ฝ”๋“œ ๋ถ„๋ฅ˜' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[STUDY] #WEEK3 - QUIZ  (0) 2024.10.04
[SESSION] 3. PEํŒŒ์ผ(2)  (1) 2024.10.04
[STUDY] #WEEK2 - QUIZ  (0) 2024.09.24
[SESSION] 2. PEํŒŒ์ผ  (0) 2024.09.24
[SESSION] OT  (1) 2024.09.21

+ Recent posts