• 코드의 흐름은 대부분 스택 영역에서 진행 됨
  • 스택 영역에 대한 이해가 매우 중요

스택 포인터(Stack Pointer)

  • 현재 스택의 top위치, 즉 push/pop이 일어날 지점
  • 함수 호출 지역 변수, 리턴 주소 등을 스택에 push 스택 포인터가 아래로 이동
  • 함수 종료 해당 데이터 pop 스택 포인터 다시 위로 이동

스택 프레임(Stack Frame)

  • 각 함수 호출 시 생성되는 스택 공간 덩어리
  • 함수 호출 시 그 함수만을 위한 정보가 스택에 저장되는데 그게 하나의 프레임
  • 포함 내용 : 함수의 지역 변수, 매개변수, 리턴 주소, 이전 함수의 프레임 포인터

베이스 포인터

  • 현재 함수의 스택 프레임의 기준점을 고정시켜주는 포인터
  • 함수 호출 시, 기존 BP 값을 스택에 저장 SP값을 복사해서 BP로 설정
  • BP를 기준으로 지역 변수는 BP-n, 매개변수는 BP+n 방식으로 접근
  • 각 스택 프레임 마다 고정된 경계 기준점 역할

스택 프레임(Stack Frame)의 구조

높은 주소 +----------------------+ | 매개변수 | +----------------------+ | caller의 리턴 주소 | ← 현재 함수가 끝나면 돌아갈 주소 +----------------------+ | caller의 BP 저장 | ← push ebp +----------------------+← 현재 베이스 포인터 (BP) | 지역 변수 | +----------------------+ | … | ← 스택 포인터 (SP) +----------------------+ 낮은 주소