1. CODE 영역
컴파일 된 바이너리 Code들이 저장되는 메모리 영역
2. DATA 영역
선언된 (전역)변수들(함수 내 변수는 제외)이 저장되는 메모리 영역
3. STACK 영역
함수(func(1,2))를 실행 후에 그 다음 실행할
함수(print(c))의 주소(return address)를 가장 먼저 메모리에 저장한다.
이후 사용한 (지역)변수들을 저장하고 사용후 메모리에서 지운다.
4. HEAP 영역
동적으로 생성될 필요가 있는 데이터를 저장하는 공간(C의 mallock())
[C 코드를 통한 예시]
STACK 영역은 이름 그대로 자료구조 Stack 형태로 실행되므로
가장 늦게 추가된 data를 먼저 처리하고 메모리에서 pop(제거)한다.
<사용 및 제거 순서>
temp > data > 0005h(return 0;) > argv > argc > 0006h(main 다음 종료 default 함수)
Program Counter(PC) : 컴파일 된 코드 한줄한줄의 주소를 가르키는 레지스터
Stack Pointer(SP) : 함수가 실행될 때 STACK의 가장 최상단(다음 실행) 주소를 가르키는 레지스터
C = func(1,2)는 기계어로는
func() : 실행 / c=func() : 실행값 할당 > 2개로 분리됨
함수가 실행되면 일단 함수 실행 후 실행되는 다음 코드에 대한 주소가
return address에 저장되고 이후 들어온 인자 > 지역변수 등의 순서로 stack에 쌓인다
EBP : 함수 실행중 문제가 생겼을 때 문제 point를 추적하기 위해
SP값을 추가로 저장해두는 레지스터
EAX : 함수의 return 값을 저장해두는 레지스터