luvit

스택(Stack) 본문

Hacking/Reverse Engineering

스택(Stack)

HongJun Choi 2018.01.04 01:18

· 스택(Stack)

"LIFO(Last In First Out) 구조를 가지는 자료구조이다."


스택 관련 알아야 할 지식

1. 함수 호출 시 파라미터가 들어가는 방향

2. 리턴 주소

3. 지역 변수 사용


함수 안에서 스택을 사용할 때 다음과 같은 코드가 엔트리 포인트에 생성된다.

push ebp

mov ebp, esp

sub esp, 50h



① ebp 레지스터를 스택에 넣는다.

② 현재 esp 값을 ebp에 넣는다.

③ esp에서 50h만큼 빼서 공간을 확보한다.




[그림 1] 함수 프롤로그


좀 더 구체적인 동작 과정을 설명하기 위해 그림 1을 그려봤다. 첫 번째 push ebp를 하게 된 후에 그림은 노란색으로 표시 된 것과 같다. EBP는 Base Pointer를 가리키며, ESP는 현재 스택의 최상단 EBP 위쪽을 가리킨다. 두 번째 mov ebp, esp 명령을 수행하게 되면 ESP는 변동이 없으나, EBP는 ESP 값을 받아 4byte만큼 옮겨지게 된다. 세 번째, sub esp, 50h를 수행하게 되면 50H만큼의 공간이 생성되게 되고 ESP는 자연스럽게 스택의 젤 끝으로 이동하게 된다.

'Hacking > Reverse Engineering' 카테고리의 다른 글

함수 호출  (0) 2018.01.04
스택(Stack)  (0) 2018.01.04
필수 어셈블리 명령어  (0) 2018.01.04
레지스터  (0) 2018.01.03
어셈블리  (0) 2018.01.03
리버스 엔지니어링 개요  (0) 2017.12.27
0 Comments
댓글쓰기 폼