본문 바로가기
Study/리버싱

Stack

by 꼬부기가우는소리 2016. 6. 12.
728x90


참고 도서 : [리버싱 핵심원리 : 악성 코드 분석가의 리버싱 이야기]

저자 : 이승원

출판사 : 인사이트


참고 사이트 :

- [위키백과] 스택



Stack

스택(Stack)은 제힌적으로 접근할 수 있는 나열 구조다. 접근 방법은 언제나 목록의 끝에서만 일어난다. 즉, 한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조 (LIFO, Last In First Out)으로 되어 있다. 자료를 넣는 것을 푸시(push)라고 하고 반대로 넣어둔 자료를 꺼내는 것을 팝(pop)이라고 한다. 이 때 가장 최근에 보관한 자료부터 나오게 된다.





프로세스에서 스택 메모리의 역할은 아래와 같다.


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

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

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


이와 같은 역할을 수행하기 위해서는 FILO (First In Last Out) 구조가 유용하다.




프로세스에서 스택 포인터(ESP)의 초기 값은 Stack bottom 쪽에 가깝다. PUSH 명령에 의해서 Stack에 값이 추가되면 스택 포인터는 Stack Top을 향해 움직이고, POP 명령에 의해 스택에서 값이 제거되면 스택 포인터는 다시 Stack Bottom을 향해 움직인다. 즉, 높은 주소에서 낮은 주소 방향으로 스택이 자라난다.




'Study > 리버싱' 카테고리의 다른 글

PE Structure (2) PE 헤더  (1) 2016.06.29
PE Structure (1) PE 포맷  (0) 2016.06.19
Register  (1) 2016.06.08
Endianness  (0) 2016.06.08
Stub Code  (0) 2016.06.08

댓글