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 |