스택 프레임이란 함수가 호출되었을 때 그 함수가 가지는 공간 구조이다. 함수가 동작을 종료하고 복귀 주소로 돌아갈 때 스택 프레임은 소멸된다.
ESP 레지스터는 스택 포인터 역할을 하고, EBP 레지스터는 베이스 포인터 역할을 한다. ESP 레지스터의 값은 프로그램 안에서 수시로 변경되기 때문에 스택에 저장된 변수, 파라미터에 접근하고자 할 때 ESP 값을 기준으로 하면 프로그램을 만들기 어려워진다. 따라서 어떤 기준 시점 (함수 시작) 의 ESP 값을 EBP에 저장하고 이를 함수 내에서 유지해주면, ESP 값이 아무리 바뀌어도 EBP 를 기준으로 안전하게 해당 함수의 변수, 파라미터, 복귀 주소에 접근할 수 있게 된다.
1. 함수가 사용할 파라미터를 스택에 넣고 함수 시작지점으로 점프 (함수 호출) 한다
2. 함수 내에서 사용할 스택 프레임을 설정한다 < 프롤로그
3. 함수의 내용을 수행한다
4. 수행을 마치고 처음 호출한 지점으로 돌아가기 위해 스택을 복원한다 < 에필로그
5. 호출한 지점의 다음 라인으로 점프한다
'Layer7 > WriteUp' 카테고리의 다른 글
[Dreamhack]rev-basic-1 WriteUp (0) | 2024.06.19 |
---|---|
x86, x64 Calling Convention(함수 호출 규약) 차이점 정리 (0) | 2024.06.17 |
어셈블리어로 Hello World 12번 출력하기 (0) | 2024.06.12 |
[LOS]darkelf WriteUp (0) | 2024.06.03 |
[LOS]wolfman WriteUp (0) | 2024.06.03 |