티스토리 뷰

이 블로그는 제가 공부한 것을 바탕으로 정리 목적으로 사용되고 있습니다.

작성 내용중 부족한 부분이나 잘못된 부분을 지적해주시면 감사하겠습니다 (꾸벅)


프로세스에서 스택 메모리의 역할을 한다.

1. 함수 내의 로컬 변수 임시 저장

2. 함수 호출 시 파라미터 전달

3. 복귀 주소 저장

실제로 스택이 어떤 식으로 동작하는지 알기 위해 OllyDbg를 이용해서 알아보자.


처음 exe파일을 실행시키면 위와 같은 상태가 된다. 스택 포인터(ESP)의 값은 12FFC4이다. 우측 하단의 스택 창을 보면 ESP가

가리키는 주소와 그 값을 보여준다. STEPINTO[F7] 명령으로 401000주소의 PUSH 100을 실행시킨다.



위의 그림을 보면 ESP의 값은 12FFC0로 4바이트가 줄어들었다. 그리고 현재 스택 포인터가 가리키는 주소는 12FFC0에는 PUSH

명령에 의해 100이 저장되어 있다. 스택에 값을 집어 넣었더니 스택 포인터(ESP)가 위쪽 방향(위쪽 방향은 값이 4만큼 준것을 의미함)으로

이동한 것을 볼 수 있다. 

다시 한 번 STEPINTO[F7] 명령으로 다시 한번 실행 시킨다.


그러면 ESP의 값은 4바이트만큼 증가하여 12FFC4로 되었고, 스택은 초기상태와 같아졌다. 이 말은 즉 스택에서 값을 꺼냈더니

ESP는 아래 방향(아래 방향은 값이 4만큼 증가한 것을 의미함)으로 이동하였다. 

위의 상황을 정리하자면 스택에 값을 입력하면 스택 포인터는 감소하고, 스택에서 값을 꺼내면 스택 포인터는 증가한다.


<출처 : 리버싱 핵심 원리 ; 저자 : 이승원 지음>

'Reversing > Reverse Engineering' 카테고리의 다른 글

PE File Format에 대해서  (0) 2015.12.29
abex’ crackme #1  (0) 2015.12.26
PACKING  (0) 2015.12.21
함수의 호출 규약  (0) 2015.12.21
레지스터, 단지 변수이다.  (0) 2015.08.05
댓글