본문 바로가기
보안/리버싱

스택 프레임

by 하용권 2019. 8. 2.

스템 프레임이란?

 -ESP(스택 포인터)가 아닌 EBP(베이스 포인터) 레지스터를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법

 

ESP레지스터의 값은 프로그램 안에서 수시로 변경되기 때문에 스택에 저장된 변수, 파라미터에 접근하고자 할 때 ESP 값을 기준으로 하면 프로그램을 만들기 어렵고, CPU가 정확한 위치를 참고하기 힘듭니다.

그래서 함수 시작의 ESP값을 EBP에 저장하고 이를 함수 내에서 유지해주면, ESP값이 아무리 변하더라도 EBP를 기준으로 안전하게 해당 함수의 변수, 파라미터, 복귀 주소에 접근할 수 있습니다. 

 

 

 

스택 프레임의 구조

PUSH EBP        ;함수 시작(EBP를 사용하기 전에 기존의 값을 스택에 저장)

MOV EBP,ESP   ;현재의 ESP를 EBP에 저장

 

...                   ;함수본체; 여기서 ESP가 변경되도, EBP는 변경 X; 안전하게 로컬 변수와 파라미터 엑세스 가능

 

MOV ESP, EBP  ;함수 시작했을 때의 값으로 복원

POP EBP         ;리턴되기 전에 저장해 놓았던 원래 EBP값으로 복원

RETN             ;함수 종료

 

 

스태겡 복귀 주소가 저장된다는 점이 보안 취약점으로 작용할 수 있습니다. buffer overflow 기법을 사용하여 복귀 주소가 저장된 스택 메모리를 의도적으로 다른 값으로 변경할 수 있습니다.

 

 

 

반응형

'보안 > 리버싱' 카테고리의 다른 글

2. abex' crackme 1  (0) 2019.07.29
1. 문자열 패치  (0) 2019.07.19