발자취

[Reverse Engineering] #04. Windows Memory Layout 본문

Dreamhack Study/Reverse Engineering

[Reverse Engineering] #04. Windows Memory Layout

해린 2024. 5. 29. 02:52

본 게시물은 Dreamhack의 Reverse Engineering 로드맵 과정을 학습한 기록이다.

 

 

#01. 서론

1. 메모리 레이아웃(Memory Layout)

: 가상 메모리(Virtual Memory)의 구성

 

리버스 엔지니어링의 핵심은 바이너리를 분석하여 바이너리의 동작을 이해하는 것.

바이너리의 동작을 자세히 이해하기 위해서는 바이너리가 상호작용하는 메모리에 대한 이해가 필요하다.


#02. 프로세스 메모리 구조

1. 섹션

: 유사한 용도로 사용되는 데이터가 모여있는 영역. (윈도우의 PE 파일은 PE 헤더와 1개 이상의 섹션으로 구성되어 있다.)

예: ".text" 섹션에는 PE의 코드가 적혀있다.

 

 

1-1. PE 헤더에 적혀 있는 섹션의 정보

  • 섹션의 이름
  • 섹션의 크기
  • 섹션이 로드될 주소의 오프셋
  • 섹션의 속성과 권한

 

1-2. 섹션의 종류 및 역할

1) .text 섹션

: 실행 가능한 기계 코드가 위치하는 영역. 읽기, 실행 권한 부여됨 (쓰기 권한은 제거)

 

2) .data 섹션

: 컴파일 시점에 값이 정해진 전역 변수들이 위치하는 영역. 읽기, 쓰기 권한이 부여됨

 

3) .rdata 섹션

: 컴파일 시점에 값이 정해진 전역 상수와 참조할 DLL 및 외부 함수들의 정보. 읽기 권한 부여됨 (쓰기 권한은 제거)

 

 

 

2. 섹션이 아닌 메모리

2-1. 스택

: 보통 지역 변수, 함수의 리턴 주소가 저장됨. 읽기, 쓰기 권한 부여. 

확장: 높은 주소 → 낮은 주소

 

 

2-2. 힙

: 모든 종류의 데이터 저장. 전역적으로 접근 가능. 동적으로 할당. 읽기, 쓰기 권한 부여 (상황에 따라 실행 권한도)