Security/Reversing
리버싱 핵심원리 5장
jjaeck_taaro
2023. 3. 27. 18:15
5장 스택
스택의 역할
1. 함수 내의 로컬 변수 임시 저장
2. 함수 호출 시 파라미터(매개변수) 전달
3. 복귀 주소(return address) 저장
이러한 역할을 수행하기 위해서 스택의 FILO(First In Last Out)구조가 아주 유용함.
스택의 특징
프로세스에서 스택포인터(ESP)의 초기값은 Stack Bottom(아래)에 가깝게 위치되어있는데 push명령에 의해 스택에 값이 추가되면 스택포인터는 Stack Top(위)을 향해 움직이고 pop으로 값이 제거되면 ESP는 다시 Stack Bottom을 향해 움직임. 즉 높은 주소에서 낮은 주소 방향으로 스택이 자라남. 즉 높은 주소에서 낮은 주소 방향으로 스택이 자라남.
우측 하단의 스택창에서 가장 위에 있는 값이 ESP값인데 우측 상단에 있는 레지스터 창에서 확인해보면 ESP의 주소와 동일함. push로 스택에 정수 값을 넣으면 ESP의 값은 4바이트만큼 줄어든다. 스택 창에서 ESP가 가리키는 주소에 저장된 값을 확인할 수 있다. 즉 스택에 값을 입력하면 ESP는 감소하고, 스택에서 값을 꺼내면 ESP는 증가함.(주소 값)
*정리 : 초기에 ESP는 Bottom(높은 주소)를 가르키고 push명령을 수행할 때 마다 Top(높은 주소)을 향해 간다.