본문 바로가기

Layer7/WriteUp

x86_64 함수 호출 규약 프롤로그, 에필로그 정리

스택 프레임이란 함수가 호출되었을 때 그 함수가 가지는 공간 구조이다. 함수가 동작을 종료하고 복귀 주소로 돌아갈 때 스택 프레임은 소멸된다.

 

ESP 레지스터는 스택 포인터 역할을 하고, EBP 레지스터는 베이스 포인터 역할을 한다. ESP 레지스터의 값은 프로그램 안에서 수시로 변경되기 때문에 스택에 저장된 변수, 파라미터에 접근하고자 할 때 ESP 값을 기준으로 하면 프로그램을 만들기 어려워진다. 따라서 어떤 기준 시점 (함수 시작) 의 ESP 값을 EBP에 저장하고 이를 함수 내에서 유지해주면, ESP 값이 아무리 바뀌어도 EBP 를 기준으로 안전하게 해당 함수의 변수, 파라미터, 복귀 주소에 접근할 수 있게 된다.

 

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

 

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

 

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

 

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

 

5. 호출한 지점의 다음 라인으로 점프한다