본문 바로가기

Reverse Engineering

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

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

 

 

 본 포스팅의 내용은 해킹 맛보기 책의 내용중 3장 리버스 엔지니어링 P133~P281 까지

 실습 내용을 따라하기 해보았습니다. 책의 내용중 일부 발췌 (수정) 하였습니다. 문제가 될 때는 비공개 하도록 하겠습니다.


 


#include <stdio.h>


int main()

{

printf("prologue & epilogue ");

return 0;

}




[발췌-수정]

함수프로그에서 PUSH EBP 후 스텍 구조


스택 구조가 함수 프롤로그와 에필로그에 따라 어떻게 변한는지 알아보자.

main() 함수의 프롤로그 PUSH EBP를 실행하면 스택 구조는 아래와 같다. 


 Low Address

 

 

 

 

 main() 함수 이전 EBP 값  

 <- 

 ESP 

 High Address

 

 

 


함수의 프롤로그 MOV EBP, ESP를 실행하면 스택 구조는 아래와 같다.

 

 Low Address

 

 

 

 

 main() 함수 이전 EBP 값  

 <- 

 ESP , EBP

 High Address

 

 

 



--------------------------------------------------------------------------------


어셈블리어에서 00071303 SUB ESP,0C0 의 명령어는 지역 변수를 사용하기 위해 

ESP를 아래로 이동시킨다. 명령어 실행 후 스택 구조는 아래와 같다. 


 Low Address

 

 

 

 

 

 <- 

 ESP

 

 ...

 

 

 

 지역 변수 2

 

 

 

 지역 변수 1

 

 

 

 main() 함수 이전 EBP 값

 

 ESP

 High Address

 

 

 





아래 어셈블리어 주소 000713F0 에서 printf() 함수를 호출하기 위해 1개의 인자를 입력한다.

PUSH 75858 명령어를 실행한 후의 스택 구조는 아래 그림과 같다.  


  Low Address

 

 

 

 

 PUSH 75858(인자 1)

 <-

 ESP

 

 ...

 

 

 

 ...

 

 

 

 지역 변수 2 

 

 

 

 지역 변수 1

 

 

 

 main() 함수 이전 EBP 값

 <-

 EBP

 High Address

 

 

 



1번 그림 


2번 그림