일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- pythonchallenge
- 웹해킹
- 쏙쏙캠프
- 파이썬챌린지
- 파이썬
- 써니나타스
- 경기대학교
- setCookie
- Web
- java
- 실습문제
- 대외활동
- 자바
- 해커스쿨
- C언어
- 암호수학
- ARP Redirect
- webhacking.kr
- FTZ
- html5
- 리버싱
- SuNiNaTas
- Linux
- 리눅스
- 웹
- C
- hackerschool
- 피들러
- 명품자바프로그래밍
- 석문초등학교
- Today
- Total
Hongfluenza
함수 프롤로그, 함수 에필로그, 스택 프레임(Stack Frame) 본문
함수의 호출
1. 함수가 사용할 파라미터를 스택에 넣고 함수 시작지점으로 점프한다. → 함수 호출
2. 함수 내에서 사용할 스택프레임을 설정한다. → 프롤로그
3. 함수의 내용을 수행한다.
4. 수행을 마치고 처음 호출한 지점으로 돌아가기 위해 스택을 복원한다. → 에필로그
스택 프레임
- 스택 프레임(Stack Frame)이란 ESP(스택 포인터)가 아닌 EBP(베이스 포인터) 레지스터를 사용하여 스택 내의 로컬 변수, 파라미터, 복귀 주소에 접근하는 기법을 말한다.
함수 프롤로그
ebp(베이스 포인터)를 스택에 저장하고 현재 esp(스택 포인터)를 ebp(베이스포인터)에 저장하는 것
함수 에필로그
mov ESP, EBP를 통해 sfp가 저장되어 있는 곳으로 스택포인터를 맞추고 그걸 POP EBP, sfp를 통해 EBP에 빼내어 이전 함수의 ebp를 다시 복원시켜준다.
ESP ( Stack Pointer register)
- 스택 포인터 역할을 한다.
- 스택의 크기를 조정할 때 사용되는 레지스터
- 스택의 최상단 주소를 갖고 있다 (=스택의 크기)
- PUSH 어셈블리어를 사용할 때 ESP가 4만큼 줄어든다. → 값을 넣었으므로 메모리 공간을 늘려준다. ( 스택의 가장 아래 부분이 높은 주소를 가지며 갈수록 낮은 주소를 가진다.)
- ESP 레지스터의 값은 프로그램 안에서 수시로 변경되기 때문에 스택에 저장된 변수, 파라미터에 접근하고자 할 때 ESP 값을 기준으로 하면 프로그램을 만들기 어렵고, CPU가 정확한 위치를 참고할 때 어려움이 생긴다.
EBP ( Base Pointer register)
- 스택 프레임 형태로 저장된 함수의 지역변수, 전달인자를 참조하거나 값을 바꾸거나 할 때 사용하는 레지스터
- 어떤 기준 시점(ex.함수의 시작)의 ESP 값을 EBP에 저장하고 이를 함수 내에서 유지해주면 ESP 값이 아무리 변하더라도 EBP를 기준으로 안전하게 해당 함수의 변수, 파라미터, 복귀 주소에 접근 가능
참고
https://redthing.tistory.com/entry/ebp%EC%99%80-esp-%EB%A0%88%EC%A7%80%EC%8A%A4%ED%84%B0
ebp와 esp 레지스터
ESP - Stack pointer register ESP 레지스터는 스택의 크기를 조정할때 사용되는 레지스터입니다. 스택의 최상단주소값을 가지고있으니 즉 스택의 크기를 나타냅니다. 어셈블리어의 PUSH 즉 스택에 값을넣는 동작..
redthing.tistory.com
[Reversing] 함수 프롤로그, 함수 에필로그, 스택 프레임
1. 함수의 호출 함수를 호출할때 스택에 어떻게 PUSH 하고 어떻게 POP할까? 함수 호출은 크게 다음과 같이 나눠진다. 1. 함수가 사용할 파라미터를 스택에 넣고 함수 시작지점으로 점프(함수 호출)한다. 2. 함수..
shotgh.tistory.com
https://gyeongje.tistory.com/36
Stack Frame(스택 프레임)
프로그램에서 선언되는 로컬 변수와 함수 호출에 사용되는 스택 프레임(Stack Frame)에 대해 공부 스택 프레임이란 ESP(스택 포인터)가 아닌 - EBP(베이스 포인터) 레지스터를 사용하여 스택 내의 로컬 변수, 파라..
gyeongje.tistory.com
'STUDY > REVERSING' 카테고리의 다른 글
ASSEMBLY : 어셈블리어 (0) | 2019.09.22 |
---|---|
[REVERSING] 진수 변환 (0) | 2018.03.14 |
어셈블리 명령어 모음 (0) | 2017.09.11 |