Study/Reversing

[Reversing]스택프레임/프롤로그&에필로그

seomj 2020. 12. 16. 20:24

함수호출

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

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

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

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

 

 

스택프레임

함수가 호출되면 스택에는 함수의 매개변수, 호출이 끝난 뒤 돌아갈 반환 주소값, 함수에서 선언된 지역 변수 등이 저장

 

함수가 동작을 종료하고 복귀 주소로 돌아갈 때 스택 프레임은 소멸

 

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

 

EBP, ESP

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

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

 

 

스택 프레임의 구조

프롤로그

ebp를 스택에 저장하고 현재 espebp에다가 저장

 

에필로그

espebp로 복구한 후 ebp를 복구

다음 명령의 주소에서 다음 함수가 실행

 

 

 

 

출처: https://shotgh.tistory.com/33 [ipwn]

출처: https://redthing.tistory.com/entry/ebp와-esp-레지스터 [레드아이]

출처: https://gyeongje.tistory.com/36 [Gyeongje's Blog]

출처 : r-ever-scp.tistory.com/entry/%ED%94%84%EC%97%90%EB%A1%A4%ED%95%84%EB%A1%9C%EA%B7%B8