함수 시작 위치에서 스택을 확인하면, 스택에 매개변수가 입력된 후에 복귀주소(returnaddress)가 저장되어있다.
함수 시작 코드에는 이후에 EBP값을 저장하고 스택 크기를 변경하는 코드가 이싿. 이 부분을 함수의 프롤로그(prologue)라 한다.
함수 구조는 함수가 시작할 때 수행되는 프롤로그와 함수가 끝날 때 수행되는 에필로그(epilogue)가 있다. 함수 프롤로그와 에필로그는 다음과 같다.
코드 | 설명 | |
함수 프롤로그 |
push ebp | 이전 함수의 EBP 레지스터 값을 스택에 보관 |
mov ebp, esp | 현재 함수의 EBP 레지스터 값을 새롭게 설정 | |
sub esp, 10 | ESP 값을 변경하여 지역변수 공간을 확보 | |
함수 에필로그 |
leave | (mov esp, ebp) ESP 값을 복원하고, (pop ebp) 이전 함수의 EBP 값을 꺼냄(pop) |
ret | (pop eip) 저장된 복귀주소를 꺼내 EIP에 저장 |
'reversing > 어셈블리어' 카테고리의 다른 글
조건부 점프 (0) | 2023.04.17 |
---|---|
while 문 (0) | 2023.03.24 |
어셈블리어 명령어 (2) (0) | 2023.03.12 |
루프 (0) | 2023.03.06 |
어셈블리어 명령어 (1) (0) | 2023.03.04 |
댓글