<보안 study>/시스템

함수 프롤로그(prologue) 에필로그(epilogue)

gosoeungduk 2018. 7. 26. 00:32
반응형

메모리 구조를 기억해두어야할 필요가 있다.

스택, 라이브러리영역, 힙, 데이타 등등 상세한 영역이 있다. 






함수의 프롤로그와 에필로그는 스택, 정확히 스택프레임에 관여를 하는 작업이다.

프롤로그는 함수가 호출(Call) 될 때, 스택프레임을 구성해주는 작업까지를 일컫는다.

스택프레임(Stack Frame)은 말그대로 스택의 틀이다. 틀. 

프롤로그 과정을 그림으로 보면 이해가 편하다.





번호는 작업이 실행되는 순서인데 RET(복귀주소) 부터 스택 밑(메모리 가장높은주소)에 넣고 SFP는 그 위에(메모리 주소는 RET메모리 주소보다 낮음) 넣고 sfp밑부분에 ebp를 설정해두고 esp값에 ebp주소 값을 넣는 것까지가 프롤로그의 한 과정이다.


이제 함수가 안에서 변수도 불러오고 다른 함수도 호출시키고 하면 esp가 위,아래로 왔다갔다 할 것이다. 그러다가 함수가 마무리 될 때쯤에 에필로그 작업이 시작되는데


에필로그는 어셈블리 명령으로 leave 와 ret으로 구성되어 있다. (스택프레임이 사라지는 과정이기에 따로 그림은 없다.)


leave는

 mov %ebp %esp

 pop %ebp 

의 두개의 어셈블리어로 구성되어있는데 mov %ebp %esp 는 esp레지스터에 ebp주소를 넣음으로써 ebp와 esp를 동일 시 시키는 것(esp는 유동적이라고 바로 윗줄에서 말했으므로 이런 작업이 왜 필요하고 유효한지는 이해할 수 있을 것이다)이다. 프롤로그의 3번 상태가 되는 셈이다. pop %ebp는 ebp를 스택프레임에서 꺼내는 것이다. 그러면 프롤로그에서 1번 상태가 되어있을 것이다.


ret는

 pop %eip

 jmp %eip

의 두개의 어셈블리어로 구성되어있는데 pop %eip는 eip레지스터(프로그램에서 다음 명령줄을 가리킨다)를 스택에서 꺼낸다는 것이다. jmp %eip는 다음명령의 주소로 점프한다는 뜻이고....







나중에 디버깅하다보면 프로그램에서 100%의 확률로 있으며 ret같은 경우는 해킹기법에서 자주 사용되니 ret에서도 상세한 명령어 숙지는 기본!




반응형

'<보안 study> > 시스템' 카테고리의 다른 글

Win-AFL 퍼저 빌드과정  (1) 2022.08.11
[PoC] log4shell(CVE-2021-44228)  (0) 2021.12.12
[CodeGate_OpenCTF] csurself  (0) 2019.03.29
RTL기법이란? (Return To Library)  (0) 2018.07.26
[linux]리눅스 명령어  (0) 2018.07.24