[메모리 익스플로잇] 4. 스택프레임 / 함수 프롤로그 & 에필로그

박승욱·2025년 11월 20일

메모리익스플로잇

목록 보기
6/6
post-thumbnail

1. 스택 프레임이란?

-> 개별 함수 정보( 함수 인자, 리턴주소, 이전 베이스 포인터, 지역 변수, 레지스터 값)를 저장하는 공간

2. 함수 프롤로그 , 에필로그

프롤로그
-> 함수가 호출될 때 실행되는 초기 작업. 새로운 스택 프레임을 설정하는 과정
-> 작업: 이전 bp 저장 / 새로운 bp 설정 / 지역 변수 공간 할당

1. push rbp    //이전 베이스 포인터를 스택에 저장한다
2. mov rbp rsp // 스택 포인터 값을  새로운 베이스 포인터에 대입한다

3. sub rsp [지역변수 할당 공간만큼의 크기] 
// 스택은 높은 주소에서 낮은 주소로 커지므로 rsp에서 지역 변수 공간만큼을 빼는 연산을 한다

에필로그
-> 함수가 종료될 때 실행되는 작업. 함수 호출 전 사용하던 상태로 돌아가기 위한 스택 정리 과정
-> 작업: 스택을 원래 상태로 복원 / 이전 bp 복원 / 리턴 주소로 복귀

(이 캡처에서는 leave가 나오는데, leave 함수 안에 pop이 존재한다.)
leave:
-> 1. mov rsp rbp //현재의 스택 포인터(rsp)를 베이스 포인터(rbp) 위치로 옮겨 지역 변수 공간을 한꺼번에 정리
-> 2. pop rbp //스택에 저장되어 있던 이전 함수의 베이스 포인터 값을 꺼내 rbp 레지스터를 복구

< 함수 에필로그>
1. mov rsp rbp // sp를 이전 함수 bp로 맞춤
2. pop rbp    // 이전 함수 bp를  스택에서 pop한다
3. ret       // ret로 복귀

3. sp(스택 포인터) , bp(베이스 포인터)

sp 스택의 최상단( 스택은 높은 주소에서 낮은 주소로 자라므로 가장 낮은 주소를 가리킴)
함수 호출 및 데이터가 추가되거나 제거될 때마다 변화한다

bp 현재 함수의 스택 프레임 시작 지점
함수 호출 시 새로운 값으로 설정되고, 함수가 종료되면 이전 함수 bp로 복원

profile
일취월장?

0개의 댓글