👩🏻‍💻기초지식/C++

[C++] 스택프레임이란? EBP와 ESP

공대 컴린이 2023. 8. 17. 11:38
728x90

스택 프레임 (Stack Frame)

- 스택 프레임은 함수 호출 시 생성되는 지역변수와 매개변수, 함수의 반환 주소 등을 저장하는 메모리 영역이다.

- 즉, 함수의 호출 과정에서 호출되는 함수들을 사용하기 위해 할당되는 Stack 공간을 의미한다.

- 스택 프레임은 함수의 실행이 끝나면 자동으로 해제되며, 이를 통해 다른 함수 호출 시 새로운 스택 프레임이 생성된다.

 

메모리 오버플로우 (Memory Overflow)

- 메모리 오버플로우는 프로그램이 할당된 메모리 영역을 넘어서 데이터를 쓰거나 읽는 현상을 말한다.

- 스택 프레임 내의 데이터를 침해할 수 있고, 보안상의 이유로 위험한 문제가 될 수 있다.

 

EBP, ESP

EBP (Extended Base Pointer, Frame Pointer, FP)

- EBP는 함수를 호출하여 스택프레임이 생성될 때의 기준 포인터(Base Pointer)로 사용된다.

- 스택 프레임의 매개 변수와 지역 변수는 EBP를 기준으로 위치가 결정된다.

- EBP 레지스터는 함수의 시작 시점에 해당 스택 프레임의 맨 위 주소를 저장한다.

- 함수 내부에서는 EBP를 기준으로 오프셋을 사용하여 스택 프레임 내의 지역 변수와 매개 변수를 참조한다.

ESP (Extended Stack Pointer, SP)

- ESP는 스택 프레임의 최상단 주소값을 가리키는 레지스터이며, 범용적으로 SP라고 불린다.

- 스택의 주소는 높은 값에서 낮은 주소로 할당되므로, 최상단 주소는 가장 큰 값이 아니라 가장 작은 값이 된다.

- 스택 프레임 내의 데이터를 스택에 저장하거나 스택에서 제거하는 작업에 사용된다.

- 함수 호출 시에는 호출된 함수의 스택 프레임을 스택에 추가하고, 함수 종료 시에는 해당 스택 프레임을 스택에서 제거한다. 따

라서, ESP 레지스터는 함수 호출 및 반환에 중요한 역할을 맡고있다.

 

EBP == ESP

- EBP와 ESP가 같아지는 순간은 보통 함수의 종료 시점을 의미한다.

- 이는 함수의 실행이 완료되고 해당 함수에서 사용한 로컬 변수와 스택 프레임이 제거되는 시점을 의미한다.

- 함수 종료 시점에서 ESP와 EBP의 위치가 같아지면, 현재 함수의 스택 프레임이 제거되고 이전 함수로의 복귀가 이루어진다.

728x90