본문 바로가기

해킹/System

메모리 구조와 스택 프레임

반응형

pwnable과 reversing을 하는데는 메모리 구조에 대한 숙지가 필요합니다!

스택을 탑쌓기 처럼 아래에서 위로 쌓아가는 구조로 표현하시는 분들도 계시지만 저는 일반적으로 가장 많이 쓰는 아래에서 위로 자라는 구조로 그렸습니다.

이때의 장점은 우리가 RET등을 변조하는 것을 이해할때 좀 더 직관적인것 같습니다!

이런 메모리구조는 pwnable의 핵심이고 해당 그림을 이해해놔야 나중에 RTL이나 ROP등의 기법을 이해할 수 있습니다.

============================================================================

용어 정리

============================================================================

스택프레임: 위와 같은 메모리 구조의 스택 부분을 가르켜 스택 프레임이라고 합니다.

ebp: Extended Base Pointer의 약자입니다. ebp는 스택의 시작을 가르키는 포인터입니다. 상대주소의 기준이 되는 기준이라고 생각해두면 편합니다.

esp: Extended Stack Pointer의 약자입니다. esp는 스택의 끝을 가르키는 포인터입니다 따라서 esp는 스택이 성장함에 따라 같이 움직입니다! 

따라서 esp - ebp를 해주면 현재 스택프레임의 크기를 알 수 있습니다.

eip: Instruction Pointer의 약자입니다. 현재 실행중인 메모리의 위치를 가르킵니다. 쉽게 흐름을 제어하는 레지스터라고 이해하면 쉽습니다.

ret: return의 약자입니다. 현재 실행중인 부분을 다 처리하고 다음 진행할 곳의 주소를 가르킵니다.

sfp: Saved Frame Pointer의 약자입니다. 이전 실행위치의 ebp를 저장하는데 사용합니다.