본문 바로가기
게임해킹/리버싱 핵심원리(나뭇잎책)

5장 스택

by HHack 2024. 8. 29.
반응형

5.1 스택

프로세스에서 스택의 역할은 아래와 같습니다.

  1. 함수 내의 로컬 변수 임시 저장
  2. 함수 호출 시 파라미터 전달
  3. 복귀 주소 저장

위와 같은 역할을 수행하기에는 스택의 FILO 구조가 유용합니다.

5.1.1 스택의 특징


 

프로세스에서 스택 포인터(ESP)의 초기 값은 Stack Bottom쪽에 가깝습니다. PUSH 명령에 의해서 Stack에 값이 추가되면 스택 포인터는 Stack Top을 향해 움직이고, POP 명령에 의해 스택에서 값이 제거되면 스택 포인터는 Stack Bottom을 향해 움직입니다.

5.1.2 스택 동작 예제

Stack.exe를 통해 실습해보도록 하겠습니다.

그림 5.2 초기 상태의 스택

① 스택 포인터(ESP)의 값은 0019FF74입니다.

② 오른쪽 하단의 스택창을 보면 ESP가 가리키는 주소와 그 값을 보여줍니다.

 

StemInto[F7] 명령을 통해 401000주소의 PUSH 100 명령을 실행합니다.

그림 5.3 PUSH 명령

① PUSH 명령을 수행하여 스택 포인터(ESP)의 값은 0019FF70으로 4바이트 만큼 줄었습니다.

② 그리고 스택창을 보면 PUSH 명령을 통해 주소 0019FF70에는 100의 값이 저장되어 있는걸 볼 수 있습니다.

 

다시 한 번 StepInto[F7] 명령으로 401005 주소의 POP EAX 명령을 실행합니다.

그림 5.4 POP 명령

① POP 명령을 수행하여 스택 포인터(ESP)의 값은 4바이트 증가한 0019FF74가 되었습니다.

 

즉, 정리하면 스택에 값을 입력하면 ESP는 감소하고, 스택에서 값을 꺼내면 스택 포인터는 증가합니다.

반응형