-
스택 프레임(Stack Frame) 에 대해 알아보자IT/리버싱 핵심원리 2017. 11. 23. 17:42
공부를 시작하기에 앞서 본 글은 '리버싱핵심원리', 이승원 저자, 인사이트 를 참고했음을 밝힙니다.
또한 공부하는 입장에서 정리를 목적으로 작성하였기때문에 틀린 정보가 있을수도 있다는 것을 알려드립니다.
관련 글
스택 프레임(Stack Frame) 실습 - stackframe.exe
1. 스택 프레임
스택 프레임이란 ESP(스택 포인터)가 아닌 EBP(베이스 포인터) 레지스터를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법을 말한다.
스택 프레임을 어셈블리 코드로 보면 다음과 같은 형식이다.
PUSH EBP
MOV PEB, ESP
; 함수 시작
; 현재의 ESP(스택포인터)를 EBP에 저장
...
; 함수 본체
; 여기서 ESP가 변경되더라도 EBP가 변경되지 않으므로
; 안전하게 로컬 변수와 파라미터를 엑세스할 수 있음
MOV ESP, EBP
POP EBP
RETN
; ESP를 정리
; 리턴되기 전에 저장해 놓았던 EBP 값으로 복원
; 함수 종료
참고)
- 최신 컴파일러는 최적화(Optimization) 옵션을 가지고 있어서 간단한 함수 같은 경우에 스택 프레임을 생성하지 않는다.
- 스택에 복귀 주소가 저장된다는 점이 보안 취약점으로 작용할 수 있다. buffer overflow 기법을 사용하여 복귀 주소가 저장된 스택 메모리를 의도적으로 다른 값으로 변경할 수 있다.
이를 통해서 함수가 시작할 때 스택의 움직임과 함수가 종료될 때 스택의 움직임을 확실히 이해할 수 있었다.
다음 글에서는 실제 스택 프레임이 OllyDbg를 통해 어떻게 동작하는지 보도록 하겠다.
도움이 되었다면 아래
공감 버튼 한번씩 눌러주세요.^^
'IT > 리버싱 핵심원리' 카테고리의 다른 글
함수 호출 규약(Calling Convention) (0) 2017.11.24 스택 프레임(Stack Frame) 실습 - stackframe.exe (0) 2017.11.23 스택(Stack) 이란 무엇인가? (0) 2017.11.23 IA-32 Register 기본 설명(3/3) (0) 2017.11.23 IA-32 Register 기본 설명(2/3) (0) 2017.11.23 댓글