[리버싱 핵심원리] 1부 5장 정리

PROFILE IMAGE
어노잉
·

본 게시글의 내용은 리버싱 핵심원리를 보며 복습 겸 정리를 위해 작성하였습니다.


책 내용과 일부 다를 수 있고, 이해를 돕기 위한 저만의 예시도 일부 포함되어 있습니다.


본 게시글에서 사용되는 소스코드와 파일은 리버싱 핵심원리에서 제공하는 파일을 사용하며, 사용하는 도구는 다를 수 있습니다.

스택

스택(Stack)은 자료구조의 한 종류로, FILO(First In Last Out, 선입후출) 또는 LIFO(Last In First Out, 후입선출)의 규칙을 따르고 있습니다. 즉, 한 쪽 끝에서만 데이터의 삽입(push)과 제거(pop)가 이루어집니다. 가장 마지막에 삽입된 데이터가 가장 먼저 나갈 수 있는 방식입니다. 레고 블록을 생각하시면 이해하기 쉽습니다. (밑에서 빼는거 말고..)

용도

프로세스에서 스택 메모리의 용도는 다음과 같습니다.

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

예시

push 100
pop eax

스택 포인터의(ESP) 값이 12FF8C일 때 PUSH 100 명령을 실행하면 스택 포인터의 값이 12FF88로 4바이트 줄어듭니다. 그리고 스택 포인터가 가르키는 주소 12FF88에는 PUSH 명령에 의해 100이라는 값이 저장됩니다.

 

POP EAX 명령을 실행하면 스택 포인터의 값이 12FF8C로 4바이트 증가합니다. 스택에서 데이터를 꺼낸(제거) 것이기 스택 포인터의 값이 4바이트 증가합니다. EAX 레지스터에는 스택에서 가져온 100 이라는 값이 저장됩니다.

PROFILE IMAGE
K's Garage 어노잉

주제 가리지 않고 잡다하게 다 하는 블로그

D-DAY
블로그 운영일 블로그를 운영한 기간이예요!
🌅 새해 2026년 새해까지 남은 기간이예요!
보관함
달력
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31