Windows Memory Layout

  • 메모리 레이아웃이란 프로세스 가상 메모리(Virtual Memory)의 구성을 말함
  • 프로그램을 실행하면 운영체제는 프로세스에게 사용 가능한 메모리 공간을 할당하는데, 이 공간을 가상 메모리라고 부름


프로세스 메모리 구조

섹션

  • 윈도우의 PE 파일은 PE 헤더와 1개 이상의 섹션으로 구성
  • 섹션에 대한 정보는 PE 헤더에 적혀 있으며, 아래는 PE 헤더에 저장되는 관련 데이터
    • 섹션의 이름
    • 섹션의 크기
    • 섹션이 로드될 주소의 오프셋
    • 섹션의 속성과 권한
  • 윈도우는 PE를 실행할 때, 이 정보를 참조하여 PE의 각 섹션들을 가상 메모리의 적절한 세그먼트에 매핑
  • PE는 일반적으로 .text, .data, .rdata 섹션이 일반적으로 사용됨


.text

  • .text 섹션은 실행 가능한 기계 코드가 위치하는 영역
  • 프로그램이 동작하려면 코드를 실행할 수 있어야 하므로 이 세그먼트에는 읽기 권한과 실행 권한이 부여됨
  • 쓰기 권한이 있으면 공격자가 악의적인 코드를 삽입하기 쉬워지므로 현대에는 대부분 쓰기 권한 제거


.data

  • .data 섹션에는 컴파일 시점에 값이 정해진 전역 변수들이 위치
  • CPU가 이 섹션의 데이터를 읽고 쓸 수 있어야 하므로, 읽기/쓰기 권한이 부여됨


.rdata

  • .rdata 섹션에는 컴파일 시점에 값이 정해진 전역 상수와 참조할 DLL 및 외부 함수들의 정보가 저장

  • CPU가 이 섹션의 데이터를 읽을 수 있어야 하므로, 읽기 권한이 부여되지만, 쓰기는 불가능

  • 과거에는 참조할 DLL과 외부 함수들의 정보를 .idata 섹션에 저장하였으나, 최근에는 대부분 .rdata에 저장

    char *str_ptr = "readonly"; // str_ptr은 .data, 문자열은 .rdata
    


스택

  • 윈도우즈 프로세스의 각 쓰레드는 자신만의 스택 공간을 가지고 있음
  • 보통 지역 변수나 함수의 리턴 주소가 저장됨
  • 이 영역은 자유롭게 읽고 쓸 수 있어야 하기 때문에 읽기/쓰기 권한이 부여
  • 스택은 기존 주소보다 낮은 주소로 확장되기 때문에 ‘아래로 자란다’ 라고 표현


  • 힙은 프로그램이 여러 용도로 사용하기 위해 할당받는 공간이며, 모든 종류의 데이터가 저장될 수 있음
  • 스택과 다른 점은 비교적 스택보다 큰 데이터도 저장할 수 있고 전역적으로 접근이 가능하도록 설계되었으며, 실행 중 동적으로 할당받는 점이 다름
  • 권한은 보통 데이터를 읽고 쓰기만 하기 때문에 읽기/쓰기 권한만을 가지나, 상황에 따라 실행 권한을 가지는 경우도 존재

카테고리:

업데이트:

댓글남기기