Stack Frame

컴컴한해커·2025년 1월 3일

리버스 엔지니어링

목록 보기
2/18

📌 스택 프레임(Stack Frame)이란?

ESP(Stack Pointer)가 아닌 EBP(Base Pointer)를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법


📌 스택 프레임의 구조

// 함수 프롤로그
MOV EBP			;EBP를 사용하기 전에 기존의 값을 스택에 저장
MOV EBP, ESP	;현재의 ESP를 EBP에 저장

// 함수 본체
	...			; 여기서 ESP가 변경되더라도 EBP가 변경되지 않으므로
	...			; 안전하게 로컬 변수와파라미터를 엑세스할 수 있음 

//  함수 에필로그
MOV ESP,EBP		;ESP를 정리(= 함수 시작했을 때의 값으로 복원)
POP EBP		;리턴되기 전에 저장해 놓았던 원래 EBP 값으로 복원
RETN	;함수 종료

📌 스택 프레임 동작 방식

개인적으로 스택 프레임은 그림으로 본 후 코드를 해석해야 이해가 잘 되었다.

example code

int main(void)
{
	func1();
    return 0;
}

void func1()
{
	func2();
}

void func2()
{
}

변화 양상

출처 - TCPSCHOOL.com

동작 방식

  1. main 함수가 호출되어 main 함수의 스택 프레임이 스택에 저장된다.
  2. func1 함수를 호출하면서 func1 함수의 스택 프레임이 스택에 저장된다.
  3. func2 함수를 호출하면서 func2 함수의 스택 프레임이 스택에 저장된다.
  4. 스택의 특성(First In Last Out)에 의해 func2 --> func1 --> main 함수 순으로 종료되면서 스택 프레임이 해제된다.

0개의 댓글