1. 함수 프롤로그
- 프롤로그 = 스택 프레임 생성 = 함수 실행 준비 과정

1) push ebp : 함수가 종료된 후 ebp를 이전 함수의 ebp로 재설정하기 위해 스택에 이전 함수의 ebp를 push함
2) mov ebp, esp : 호출된 함수의 시작을 알리기 위해 현재 esp 값을 ebp에 복사함.
→ 프롤로그를 통해 스택프레임을 형성하고 형성된 스택프레임을 통해 함수를 구분지을 수 있게함.
Esp가 가리키는 곳을 ebp도 가리키게 됨.
2. 함수 에필로그
- 에필로그 = 함수의 기능을 수행하고 난 후, 호출한 곳으로 돌아오기 위해 스택을 복원하는 과정

1) leave
: 함수를 종료하고, ebp를 이전함수의 ebp로 재설정해주는 과정 (프롤로그와 반대로 진행)
1- mov esp, ebp : 함수를 종료하기 위해 ebp값을 esp에 복사
2- pop ebp : 현재 esp가 가리키고 있는 sfp를 pop하면 이전 함수(현재 함수를 호출했던 함수)로 돌아갈 수 있게됨
2) ret :
스택에 미리 저장해놓았던 return address를 eip에 넣어두고(pop) 그 주소로 이동해 (jmp) 함수를 호출한 후의 명령을 계속 수행할 수 있도록 해주는 과정
1 - pop eip : esp가 가리키는 return 주소를 eip에 넣어 다음에 실행할 명령어를 지정해줌
(pop: 스택에 가장 최근에 들어간 데이터를 꺼내 eip에 저장)
2 – jmp eip : 다음에 실행할 명령어로 이동. (특정한 곳으로 분기한다, 점프)
★ 중요한 레지스터 암기
Ax: 산술 연산에 사용 및 함수 리턴 값에 쓰임
Sp: 스택의 최상단을 가리키는 포인터
Bp: 스택의 베이스를 가리키는 포인터
Ip: 다음에 실행되어야할 명령어의 주소를 가리킴
'SYSTEM' 카테고리의 다른 글
가상 메모리와 물리 메모리 (0) | 2023.01.03 |
---|---|
커널영역, 유저영역 차이 (0) | 2023.01.03 |
공유 라이브러리 생성 (0) | 2022.12.30 |
리눅스 특수권한 조사, 실습 (0) | 2022.12.30 |
함수 호출 규약 (Calling Convention) (1) | 2022.12.12 |