본문 바로가기
[보안 Archive] ~2017/리버싱 핵심 원리

[2주] 7장- 스택 프레임

by Joy L. 2015. 3. 16.
반응형

리버싱 핵심 원리

                              [2주]




7장 - 스택 프레임



스택 프레임 : ESP가 아닌 EBP(베이스 포인터)를 사용하여 스택 내의 로컬변수, 파라미커, 복귀 주소에 접근하는 기법.

 


EBP 레지스터의 베이스 포인터 역할:

ESP값은 프로그램 안에서 수시로 변경된다. 그래서 스택에 저장된 변수, 파라미터에 접근하고자 할 때 ESP 값을 기준으로 하면 프로그램을 만들기 힘들고, CPU가 정확한 위치를 참고할 때 어려움이 있다. 따라서 어떤 기준 시점(함수의 시작)ESP값을 EBP에 저장하고 이를 함수에서 유지하면 ESP값이 아무리 변해도 EBP를 기준으로 안전하게 해달 함수의 변수, 파라미터, 복귀 주소에 접근할 수 있다.



스택 프레임 구조


스택 프레임을 잘 이해하기 위해 책에 있는 실습을 해보도록 한다.




어셈블리와 C언어의 포인터 구문 형식





OllyDbg 옵션 변경


1. Disasm 옵션


- 옵션 다이얼로그 -> Disasm -> 'Show default segments'랑 'Always show size of memory operands' 항목을 uncheck 하면 세그먼트 표시와 메모리 크기 표시가 사라진다.


2. Analysis1 옵션


- 'Show ARGs and LOCALs in procedure' 항목을 체크하면 EBP로 표시되던 함수의 로컬변수와 파아미터가 [LOCAL.1], [ARG.1] 형식으로 표시된다. (이 옵션은 뛰어난 가독성을 제공한다)


- OllyDbg에서 직접 함수의 스택 프레임을 분석하여 로컬 변수의 개수, 파라미터의 개수 등을 화면어 표시해준다. 가끔 틀리게 표시하지만 직관적인 표시로 디버깅에 도움이 될때가 많다.


반응형

댓글