카테고리 없음
[리버싱] 함수의 프롤로그와 에필로그
zyari
2019. 9. 22. 17:37
반응형
함수의 프롤로그와 에필로그는 스택 프레임에 관여하는 개념이다.
스택 프레임
esp레지스터는 스택 포인터 역할을 하고, ebp는 베이스 포인터 역할을 한다.
스택 포인터는 현재 스택의 가장 위쪽을 가리키고 있는 포인터이고, 베이스 포인터는 현재 스택의 가장 바닥을 가리키고 있는 포인터이다.
esp는 프로그램안에서 계속 변경되는 값이기 때문에 esp값을 ebp에 복사해주고 후에 어떤 값에 접근하고자 할때 ebp를 사용한다면 아무리 esp값이 바뀌어도 ebp를 이용하여 파라미터나 변수에 더욱 쉽게 접근할 수 있다.
프롤로그
: 스택 프레임을 생성하기 위한 작업
push ebp //ebp를 스택에 저장하고(ebp에 esp를 넣기 전에 원래의 값을 저장)
mov ebp, esp //esp에 ebp를 저장한다.
에필로그
: 스택 프레임을 해제하기 위한 작업, 즉 함수가 끝나면 함수를 처음 호출한 지점으로 돌아가기 위한 작업
mov esp, ebp //esp를 원래의 값(처음에 ebp에 esp를 저장했으므로)으로 변경
pop ebp //원래의 ebp값으로 바꾸기
반응형