본문 바로가기

Study/Reverse Engineering

Windows Memory Layout

728x90

메모리 레이아웃? 프로세스 가상 메모리의 구성을 말함.

 

프로세스 메모리구조

1) 섹션 = 유사한 용도로 사용되는 데이터가 모여있는 영역

- 윈도우의 PE 파일은 PE 헤더와 1개 이상의 섹션으로 구성되어 있음

- 섹션에 대한 정보는 PE 헤더에 있음 

중요 -> 섹션의 이름, 섹션의 크기, 섹션의 로드될 주소의 오프셋, 섹션의 속성과 권한

 

윈도우는 PE를 실행할 떄, 이런 중요 정보를 참조하여 PE의 각 섹션들을 가상 메모리의 적절한 세그먼트에 매핑함.

 

주로 .text, .data, .rdata 섹션이 일반적으로 사용됨

 

".text"

  • 실행 가능한 기계 코드가 위치하는 영역
  • 읽기 권한과 실행 권한 부여.

".data"

  • 컴파일 시점에 값이 정해진 전역 변수들이 위치함.
  • 읽기/쓰기 권한 부여.

".rdata"

  • 컴파일 시점에 값이 정해진 전역 상수와 참조할 DLL 및 외부 함수들의 정보가 저장됨
  • 읽기 권한 부여.
const char data_rostr[] = "readonly_data";
char *str_ptr = "readonly";  // str_ptr은 .data, 문자열은 .rdata

int main() { ... }

 

섹션이 아닌 메모리

윈도우의 가상 메모리 공간에는 섹션만 로드되는 것이 아님

프로그램 실행에 있어 필요한 스택과 힙 역시 가상 메모리 공간에 적재됨

 

스택

- 지역 변수함수의 리턴 주소가 저장됨

- 읽기/쓰기 권한 부여

- 스택이 확장될 때, 기존 주소보다 낮은 주소로 확장됨

 

- 프로그램이 여러 용도로 사용하기 이해 할당받는 공간

- 모든 종류의 데이터가 저장될 수 있음

- 비교적 스택보다 큰 데이터 저장 가능, 전역적으로도 접근이 가능

- 실행 중 동적으로 할당받음

- 읽기/쓰기 권한

int main() {
  int *heap_data_ptr =
      malloc(sizeof(*heap_data_ptr));  // 동적 할당한 힙 영역의 주소를 가리킴
  *heap_data_ptr = 31337;              // 힙 영역에 값을 씀
  printf("%d\n", *heap_data_ptr);  // 힙 영역의 값을 사용함
  return 0;
}

 

Summary

'Study > Reverse Engineering' 카테고리의 다른 글

dreamhack : patch write-up  (0) 2024.05.11
dreamhack : rev-basic-1 write-up  (0) 2024.05.03
Computer Architecture(컴퓨터 구조)  (0) 2024.04.29
정적분석과 동적분석  (0) 2024.04.11
Binary 개념 정리  (0) 2024.04.11