Hongfluenza

함수 프롤로그, 함수 에필로그, 스택 프레임(Stack Frame) 본문

STUDY/REVERSING

함수 프롤로그, 함수 에필로그, 스택 프레임(Stack Frame)

Hongfluenza 2019. 8. 17. 18:27
함수의 호출

1. 함수가 사용할 파라미터를 스택에 넣고 함수 시작지점으로 점프한다. → 함수 호출

2. 함수 내에서 사용할 스택프레임을 설정한다. → 프롤로그

3. 함수의 내용을 수행한다.

4. 수행을 마치고 처음 호출한 지점으로 돌아가기 위해 스택을 복원한다. → 에필로그

 

스택 프레임

 

스택 프레임 구조

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

 

 

함수 프롤로그

ebp(베이스 포인터)를 스택에 저장하고 현재 esp(스택 포인터)를 ebp(베이스포인터)에 저장하는 것

 

함수 에필로그

mov ESP, EBP를 통해 sfp가 저장되어 있는 곳으로 스택포인터를 맞추고 그걸 POP EBP, sfp를 통해 EBP에 빼내어 이전 함수의 ebp를 다시 복원시켜준다.

 

ESP ( Stack Pointer register)

- 스택 포인터 역할을 한다.

- 스택의 크기를 조정할 때 사용되는 레지스터

- 스택의 최상단 주소를 갖고 있다 (=스택의 크기)

- PUSH 어셈블리어를 사용할 때 ESP가 4만큼 줄어든다. → 값을 넣었으므로 메모리 공간을 늘려준다. ( 스택의 가장 아래 부분이 높은 주소를 가지며 갈수록 낮은 주소를 가진다.)

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

 

EBP ( Base Pointer register)

- 스택 프레임 형태로 저장된 함수의 지역변수, 전달인자를 참조하거나 값을 바꾸거나 할 때 사용하는 레지스터

- 어떤 기준 시점(ex.함수의 시작)의 ESP 값을 EBP에 저장하고 이를 함수 내에서 유지해주면 ESP 값이 아무리 변하더라도 EBP를 기준으로 안전하게 해당 함수의 변수, 파라미터, 복귀 주소에 접근 가능

 

 

...더보기

 

 

 

 

 

 

 

 

'STUDY > REVERSING' 카테고리의 다른 글

ASSEMBLY : 어셈블리어  (0) 2019.09.22
[REVERSING] 진수 변환  (0) 2018.03.14
어셈블리 명령어 모음  (0) 2017.09.11