본문 바로가기

스택 프레임(Stack Frame) 개념 정리

@eouya22025. 5. 19. 23:25

 

스택 프레임

스택메모리는 함수의 지역변수, 파라미터, 리턴주소가 저장되는 메모리 공간이다.

함수가 호출될 때 마다 스택에 생성되는 영역(블록)을 스택 프레임 이라고 한다.

 

스택 프레임 형성 과정

1. Call function

  • 함수에 사용될 매개변수와 return address를 스택에 push한다.

2. Prologue

  • push rbp / mov rbp, rsp / sub rsp, ...

3. exec function

  • 파라미터는 레지스터 또는 스택으로 전달
  • 지역변수는 rbp기준 상대 주소로 접근

4. Epilogue

  • mov rsp, rbp / pop rbp / pop rip / ret

 

 

 

함수 에필로그/프롤로그 글이랑 같이 보면 좋을 것 같다.

 

gdb를 통한 스택 프레임 확인

#include <stdio.h>

int add(int a, int b)
{
    return a + b;
}

int main()
{
    add(1,2);
    return 0;
}

 

간단한 덧셈 함수를 gdb를 통해 확인해 보았다.

 

 

구성 함수들

 

 

add함수를 Call 한 순간이다. 이미 ret은 push된 상태이다.

Call add 이전에 레지스터로 파라미터를 전달하는게 보인다.

 

add 내부 스택 프레임에서는 프롤로그 과정과 rbp기준 offset으로 인자를 전달 받는것을 확인할 수 있다.

 

 

이후 내부에서 레지스터를 이용해 연산을 마치고 프롤로그 과정을 거친다.

eouya2
@eouya2 :: eouya2

개인공부 기록 / 틀린거 있으면 따끔하게 지적 해주세요..

목차