본문 바로가기

High Level Technique/Shellcoding

Stack

Stack


스택은 메모리에 값이 쌓이는 공간을 말합니다. 메모리에 어떻게 쌓이는 지 알아보도록 하죠.



먼저 스택을 알아보기 전에 Endian에 대해서 알아보도록 하겠습니다.

Endian: http://kblab.tistory.com/58




자, 이제 스택구조에 대해서 알아보도록 하겠습니다.


스택은 LIFO 구조를 갖습니다. LIFO는 Last in First Out 이라는 말인데요. 나중에 들어온 것이 처음으로 나가는걸 뜻합니다.




push 명령어를 통해서 스택에 쌓이게 되며 pop 명령어를 통해서  제거됩니다.



간단히 ASM코드를 작성하여 스택에 대해 좀 더 알아보겠습니다.





각 레지스터에 해당 값을 저장하고 스택에 쌓고 빼는 소스코드 입니다.


이 소스코드를 컴파일하여 실행 파일로 만들고 GDB를 이용하여 분석하도록 하겠습니다.






현재까지 실행된 주소는 0x08048074 입니다. 화살표 표시된 부분은 실행 될 부분이라는 것을 명심해야 합니다.


각 레지스터에 값을 저장한 것을 확인 할 수 있습니다. 각 레지스터를 확인하는 명령어는 info register 입니다. 줄여서 i r로도 사용가능합니다.


먼저 push 명령어를 실행시키기전에 스택을 확인해보도록 하겠습니다.




계속해서 push를 이용하여 스택에 쌓고 어떻게 쌓여있는지 확인해 보도록 하죠.


다시 스택을 확인해 보도록 하죠.






이렇게 스택에 값이 쌓이게 됩니다. 



마찬가지로 pop 명령어를 실행하면 다음과 같이 스택이 변합니다.





0x44444444이라는 값이 저장되있던 스택이 pop 명령어가 실행되자 값이 사라졌습니다.



이러한 방식으로 스택 구조가 작동됩니다.

'High Level Technique > Shellcoding' 카테고리의 다른 글

Libc, Nasm  (0) 2016.03.11
Prologue, Epilogue  (0) 2016.03.11
GDB 사용법  (0) 2016.03.11
Section  (0) 2016.03.11
출력과 입력  (0) 2016.03.11