본문 바로가기

SYSTEM

함수 프롤로그, 에필로그

728x90
반응형

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: 다음에 실행되어야할 명령어의 주소를 가리킴

728x90
반응형

'SYSTEM' 카테고리의 다른 글

가상 메모리와 물리 메모리  (0) 2023.01.03
커널영역, 유저영역 차이  (0) 2023.01.03
공유 라이브러리 생성  (0) 2022.12.30
리눅스 특수권한 조사, 실습  (0) 2022.12.30
함수 호출 규약 (Calling Convention)  (1) 2022.12.12