RAM 구조, STACK, POP, PUSH, MOV
@ RAM (Random Access Memory) 구조
- 윈도우즈 계열에서는 PE구조를 기반으로 올라가는 메모리 구조
- 리눅스 계열에서는 ELF 구조를 기반으로 올라가는 구조
- 이 게시물에서는 PE 구조를 다룸
- 메모리 영역은 크게 4가지로 구분 할 수 있음
- Code : 실행할 기계어 코드가 있는 영역
- Data : 전역변수, 정적변수, 문자열 상수 등등
- Heap : 동적할당 요청시 사용(할당)되는 영역 (malloc, calloc 등)
- *Stack : 지역변수(주목적), Return Address, Parameters 등
# Stack 공간 특징
- 런타임시에 생성
- 시작위치는 Random
- IA-32에서는 Stack을 4Byte단위로 사용
- EBP와 ESP를 이용하여 Stack 공간의 범위를 지정함

스택은 LIFO(Last Input FIrst Out) 혹은 FILO(First Input Last Out) 구조로 되어있다.
# POP / PUSH / MOV
PUSH : 스택에 값을 저장 POP : 스택의 가장 최근 값을 빼고 인자에 대입 MOV : 두번째 인자의 값을 첫번째 인자에 대입 ( ','를 기준으로 오른쪽을 복사)
PUSH 10
- SUB ESP, 4
- MOV DWORD PTR [ESP], 10 # [ESP]를 찾아가서 10을 복사
WORD = 2 bytes
DWORD = 4 bytes
QWORD = 8 Bytes
POP EAX
- MOV EAX, DWORD PTR [ESP]
- ADD ESP, 4
Stack 메모리는 PUSH를 이용해서 데이터를 밀어 넣고 POP을 이용하여 데이터를
꺼냄
