[리버싱 핵심원리] 1부 5장 정리
어노잉
·
본 게시글의 내용은 리버싱 핵심원리를 보며 복습 겸 정리를 위해 작성하였습니다.
책 내용과 일부 다를 수 있고, 이해를 돕기 위한 저만의 예시도 일부 포함되어 있습니다.
본 게시글에서 사용되는 소스코드와 파일은 리버싱 핵심원리에서 제공하는 파일을 사용하며, 사용하는 도구는 다를 수 있습니다.
스택
스택(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 이라는 값이 저장됩니다.
K's Garage
어노잉
주제 가리지 않고 잡다하게 다 하는 블로그