감자 텃밭

[시스템] Prologue [프롤로그 과정] 본문

System/System Theory Information

[시스템] Prologue [프롤로그 과정]

g2h 2021. 11. 18. 00:19

영화나 웹툰등 시작할떄 플롤로그와 에필로그가 있듯

함수도 실행이 되면 플로로그 과정과 에필로그 라고 불리는 과정이 존재한다

이번에는 프롤로그 과정에 대해 알아보도록 하겠다.


우선 플롤로그는 실행되에 해당 함수의 Stack Frame이 생성되면 가장 먼저 실행되는

순서의 명령어들이다. 

 

우선 해당 함수가 호출되면 Stack Frame가 생성되고, 스택에는 RET와 SFP가 쌓이게 되고

그 후 메모리 어딘가에 존재하는 ebp와 esp가 스택에 쌓이며,

해당 스택의 크기를 지정하게된다. 아래 사진을 이해를 도와보자.

 

사진과 같이 스택에는 함수 인자 | RET | SFP | 지역함수, 변수 등으로 쌓이게되며

프롤로그 과정을 거치게 된다.

 

 

위 사진과 같이 제일처음 PUSH ebp를 한다 즉 스택에 베이스가되는 ebp를 스택에 push하며

그 후 mov ebp, esp 하여 ebp와 esp의 주소의 위치를 똑같이 맞추게 된다.

이렇게 되면 베이스주소인 ebp와 스택포인터인 esp가 같게되며,

스택의 제일높은곳과 제일낮은곳이 같은 위치를 가리키게 된다.

 

여기서 esp의 값을 sub와 add를 통해 스택의 크기를 늘리고 줄이게 된다.

 

위 사진은 실제 프로그램을 gdb프로그램을 통해 확인한 결과이다

ebp를 스택에 push하고 ebp와 esp의 위치를 같게 만든 후 sub를 통해 스택의 크기를 늘려준 것을 확인할 수 있다.

 

포린이 : 왜 sub로 esp하면 스택의 크기가 늘어나나요??

 

그 이유는 esp는 스택의끝 제일 낮은 주소값 위치에 존재하게 되며, ebp는 가장 높은위치에 존재하게 된다.

즉 제일 높은곳은 0xffffffff이며. 제일 높은곳은 0x00000000 이기때문이다.

ebp는 베이스값으로 항상 고정되어있어야 하기에 ebp와esp가 같은 위치에서부터 esp를 움직여 줘야하며, esp를 ebp기준으로 낮은 주소값으로 sub해줘야 스택의 크기가 늘어나기 때문이다.

 

사진을 통해 더욱 자세히 알아보자.

 

위 사진은 에필로그를 진행 했을 시 스택의 상택이다 여기서 sub를 통해 스택의 변화를 알아보면

 

위와 같이 esp의 위치가 ebp기준 40바이트 뺀 위치에 존재하게되며

스택의 크기가 0x40 만큼 할당받게 된다.

즉 esp 의 위치는 ebp-0x40 가 된다.

 

주소값은 예를 들기 위해 임의의값이다.

 

 

 

 

https://hyoon.tistory.com/2 [이미지 인용]

 

 

 

'System > System Theory Information' 카테고리의 다른 글

[시스템] 리틀 에디안 방식  (0) 2021.11.20
[시스템] PLT 와 GOT [초급]  (1) 2021.11.19
[시스템] epilogue [에필로그 과정]  (1) 2021.11.18
Stack Frame ?  (0) 2021.11.15
Buffer overflow ?  (0) 2021.11.15