Process Memory

프로세스 메모리 영역

프로세스는 하나의 가상 주소 공간을 가진다. 각 영역은 생성 시점, 성장 방향, 접근 권한이 달라서 오류 위치를 추적하는 기준이 된다.

01

영역별 수명 분리

전역 값은 프로세스 전체, stack 값은 함수 호출 동안, heap 값은 명시 해제 전까지 남는다.

02

접근 권한 검토

코드 영역 쓰기 금지와 stack 실행 금지는 보호와 exploit 완화에 연결된다.

03

오류 증상을 매핑한다

stack overflow, heap use-after-free, global 초기화 문제는 서로 다른 영역에서 난다.

Stack
자동 수명 함수 호출 때 frame이 생기고 반환하면 사라진다.
큰 배열과 깊은 재귀가 위험하다.
Heap
동적 수명 malloc/new로 얻고 free/delete 또는 GC/allocator 정책으로 돌려준다.
누수와 dangling이 여기서 많다.
Text
명령 저장 프로그램 코드와 읽기 전용 상수가 들어간다.
보통 쓰기 금지다.
MMU
가상 주소 보호 페이지 단위 권한으로 읽기, 쓰기, 실행 가능성을 제어한다.
page fault가 경계 위반을 드러낸다.

수명 · 권한 · 성장 점검

수명 포인터가 가리키는 값이 stack, heap, global 중 어디에 있고 언제 사라지는가.
권한 쓰기 금지 영역에 쓰거나 실행 금지 영역을 실행하려는 흐름이 없는가.
성장 heap과 stack이 서로 가까워질 때 어떤 위험이 생기는가.

주소 공간

text | rodata | data/bss | heap -> ... <- stack | kernel mapped area