일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Hacking
- sql
- 스캐닝
- 권한상승
- 포트스캔
- 해킹
- CTF
- 내부침투
- 해킹도구
- 메타스플로잇
- Kioptrix
- 침투테스트
- 모의해킹
- 취약점분석
- SQLINJECTION
- smb
- 취약점 스캔
- Metasploit
- 시스템 해킹
- 취약점
- Samba
- 해킹툴
- 칼리리눅스
- root권한
- Los
- 암호해독
- web hacking
- 스캔
- load of sqlinjection
- SQL Injection
- Today
- Total
감자 텃밭
[시스템] epilogue [에필로그 과정] 본문
함수의 프롤로그가 있다면 에필로그도 있기 마련이죠
이번엔 함수 에필로그에 대해 다뤄보도록 하겠습니다.
우선 프롤로그 과정에서는
push ebp
mov ebp, esp
과정을 통해 이루어집니다.
에필로그 과정에서는 2가지로 나뉘어 진행되게 됩니다.
우선 코드를 보시게 되면, 마지막에
leave
ret
로 구성 되어 있는대 저 두개의 과정을 거치게 되는것이 에필로그입니다
우선 leave 부터 살펴보도록 하겠습니다.
"leave"
mov esp, ebp
pop ebp
leave는 위와 같은 구조로 되어있습니다.
mov를 통해 esp와 ebp의 위치를 같게 만들어 스택 상태를 정리해준다고 보시면 됩니다.
즉 스택에 존재하던 지역변수들을 정리해주는 과정입니다.
그 후 pop ebp를 통해 스택에 가장 위에 있던 값을 ebp에 넣게됩니다.
현재 스택상태를 정리해준 후 esp와 ebp의 위치가 같을경우 스택의 가장 위에 있는 값은
SFP가 됩니다. 그러므로 ebp에는 SFP가 들어가게 됩니다.
그림을 통해 상세히 알아보도록 하겠습니다
스택 상태는 위의 그림과 같이 존재하게됩니다 저상태에 스택 제일 상단에있는
SFP가 pop되고 ebp에 들어가게 됩니다.
sfp는 이전 함수의 ebp주소를 가지고 있게 됩니다.
이전 Stack Frame에서 설명드렸듯 SFP에는 이전 함수의 ebp의 주소가 저장되는데요
https://hg2lee.tistory.com/58?category=1240865
이 과정을 통해 현재 함수가 정리되며 ebp에는 이전 함수의 ebp가 저장되며 원래 함수의 ebp로 돌아갈 준비를 하는겁니다.
이번에는 ret 부분에 대해 살펴보도록 하겠습니다.
"ret"
pop eip
jmp eip
위의 코드로들로 이루어져 있습니다.
이전 leave단계를 거쳐 현재 스택에는 아래 그림과 같이 ret만 남아있을겁니다.
esp는 스택 최 상단에 남아있는 ret를 가리키고 있을것이고
ebp는 이전 함수의 ebp주소가 담겨져있으니 이전 함수의 ebp로 돌아갔을겁니다.
이후 "ret" 단계를 처리합니다.
그럼 pop eip를 통해 ret를 eip에 넣게됩니다. ret는 함수가 끝나고 돌아갈 주소가 담겨져있을것이고
eip는 다음에 실행해야할 명령어를 저장하는 레지스터죠
그럼 다음에 실행할 명령어에 돌아갈 주소가 담겨져있게되며, jmp eip를 통해 eip로 이동되어
eip가 실행되며 ret에 저장되어있는 주소값을 찾아게 됩니다.
보통 main함수에서 여러 일들을 처리도중 함수를 호출하게되는대 이때 새로운 함수가
생성되며 Stack Frame가 생성되며 RET, SFP가 쌓이게 되겠죠?
그럼 RET에는 해당 함수가 끝나고 main으로 돌아갔을때 함수의 역할이 끝난 그 후 실행해야할 명령어의
주소가 담겨져 있게 되는겁니다.
해당 에필로그 부분은 FPO공격 기법등 여러 기법에 사용되므로 중요한 내용이라고 생각합니다.
- mov ebp, esp를 통해 스택정리 후 ebp와 esp의 위치를 같게만듬 이로서 스택의 최상단에는 SFP 존재
- pop ebp 를 통해 최상단에 있는 SFP를 ebp에 저장, ebp는 SFP에 담겨있는 이전함수의 ebp주소로 이동
- pop eip 를 통해 최상단에 있는 ret를 eip에 저장
- jmp eip를 통해 eip로 이동 eip에는 함수가 끝난후 이전 함수에서 다음 실행할 명령어의 위치가 담겨져있기에 자연스럽게 함수가 끝난 후 이전함수 명령어들이 수행됨
https://dokhakdubini.tistory.com/227?category=809542 (내용 참조)
'System > System Theory Information' 카테고리의 다른 글
[시스템] 리틀 에디안 방식 (0) | 2021.11.20 |
---|---|
[시스템] PLT 와 GOT [초급] (1) | 2021.11.19 |
[시스템] Prologue [프롤로그 과정] (0) | 2021.11.18 |
Stack Frame ? (0) | 2021.11.15 |
Buffer overflow ? (0) | 2021.11.15 |