본문 바로가기

네이버 블로그 글 이전

스택

프로세스에서 스택 메모리의 역할

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

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

3. 복귀 주소(return address)저장

(출처. 리버싱 핵심원리)

프로세스에서 스택포인터(ESP)의 초기값은 Stack Bottom 쪽에 가깝습니다. PUSH 명령에 의해서 Stack에 값이 추가되면

Stack Top을 향해 움직이고, POP 명령에의해 스택에서 값이 제거되면 스택 포인터는 Stack Bottom 을 향해 아래쪽으로 움직입니다.\

중요! 스택은 높은 주소에서 낮은 주소 방향으로 자라난다!!

예제 !)

ESP=12FF8C

PUSH 100 명령 실행

-----------------------------------------------ESP의 값 4바이트만큼 감소

ESP=12FF88

그리고 ESP가 가리키는 주소 12FF88에는 PUSH 명령에 의해 100 저장

스택에 값을 집어 넣으니 ESP가 위쪽 방향으로 이동하는 것을 알 수 있다.

=> 높은주소에서 낮은주소로 자라나니까 ESP의 값은 4만큼 준것!!

------------------------------------------------

POP EAX 명령 실행

-----------------------------------------------ESP의 값 4바이트만큼 증가

ESP=12FF8C

즉 스택에서 값을 꺼냇더니 ESP는 아래방향으로 이동하였다

정리! 스택에 값을 입력하면 스택포인터(ESP)는 감소하고 , 스택에서 값을 꺼내면 스택 포인터는 증가한다.

그리고 스택은 높은 주소에서 낮은 주소 방향으로 자란다!!!!!!

스택 포인터의 초기 값은 스택 메모리의 아래쪽에 있다는 것도 중요!!

'네이버 블로그 글 이전' 카테고리의 다른 글

OllyDbg 디버거 명령어  (0) 2022.02.06
IA-32 Register 기본  (0) 2022.02.06
바이트 오더링  (0) 2022.02.06