스택 프레임 (Stack Frame)
- 스택 프레임은 함수 호출 시 생성되는 지역변수와 매개변수, 함수의 반환 주소 등을 저장하는 메모리 영역이다.
- 즉, 함수의 호출 과정에서 호출되는 함수들을 사용하기 위해 할당되는 Stack 공간을 의미한다.
- 스택 프레임은 함수의 실행이 끝나면 자동으로 해제되며, 이를 통해 다른 함수 호출 시 새로운 스택 프레임이 생성된다.
- 메모리 오버플로우는 프로그램이 할당된 메모리 영역을 넘어서 데이터를 쓰거나 읽는 현상을 말한다.
- 스택 프레임 내의 데이터를 침해할 수 있고, 보안상의 이유로 위험한 문제가 될 수 있다.
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의 위치가 같아지면, 현재 함수의 스택 프레임이 제거되고 이전 함수로의 복귀가 이루어진다.
'👩🏻💻기초지식 > C++' 카테고리의 다른 글
[C++] 빌드 컴파일 과정, C++ 빌드과정과 언리얼 빌드과정의 차이점은? (0) | 2023.08.17 |
---|---|
[C++] 가변 파라미터 함수를 구현하는 방법은? (0) | 2023.08.17 |
[C++] 함수 호출 규약이란? cdecl, stdcall, fastcall, thiscall 의 차이들? (0) | 2023.08.17 |
[C++] new/malloc과 delete/free 차이는? 가상 메모리 할당 함수란? (0) | 2023.08.17 |
[C++] 구조체 특성, 패딩이란? 공용체란? (0) | 2023.08.17 |