[Dreamhack]-윈도우 메모리 레이아웃

Chris Kim·2024년 10월 1일

리버싱

목록 보기
6/10

0. 들어가며

메모리 레이아웃(Memory Layout) 이란, 가상 메모리(Virtual Memory) 의 구성을 말한다. 가상 메모리란, 운영체제가 프로세스에게 할당해주는 사용 가능한 메모리 공간이다.
운영체제는 더 나아가 매모리를 적절하게 구획하고 권한을 부여한다.

1. 프로세스 메모리 구조

1.1 섹션

섹션이란 유사한 용도로 사용되는 데이터가 모여있는 영역이다. 윈도우 PE파일은 PE헤더와 1개 이상의 섹션으로 구성되어 있다. PE 헤더에는 섹션에 대한 정보가 담겨있다. 다음은 그 중 몇을 추린 것이다.

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

윈도우는 PE를 실행하면서 이 정보들을 참조하고 PE의 각 세션을 적절한 세그먼트에 매핑한다.(필수 섹션은 정해지지 않는다)

1.2 .text 섹션

.text 섹션은 실행 가능한 기계 코드가 위치하는 영역이다. 운영체제는 보안을 위해 이 세그먼트에 쓰기권한을 제거한다.

1.3 .data 섹션

.data 섹션에는 컴파일 시점에 값이 정해진 전역 변수들이 위치한다. 당연히 읽고 쓰기가 가능해야 하므로 읽기/쓰기 권한이 부여된다.

1.4 .rdata 섹션

.rdata 섹션에는 컴파일 시점에 값이 정해진 전역 상수와 참조할 DLL(동적 링크 라이브러리:여러 프로그램에서 동시에 사용할 수 있는 코드와 데이터를 포함하는 동적 라이브러리) 및 외부 함수들의 정보가 저장된다. 여기에는 읽기 권한 만이 부여된다.

1.5 섹션이 아닌 메모리

스택과 힙 또한 가상 메모리에 적재된다.

  • 스택
    윈도우즈 프로세스의 각 쓰레드는 자신만의 스택 공간을 가지고 있다. 지역변수, 함수의 리턴 주소가 저장되며 읽기/쓰기 권한이 부여된다. 스택이 확장 될 때에는 낮은 주소로 확장된다.


  • 힙은 프로그램이 여러 용도로 사용하기 위해 할당받는 공간이다. 따라서 모든 종류의 데이터가 저장될 수 있다.(짬통인가?) 스택과 달리, 큰 데이터도 저장 가능하고, 전역 접근이 되며, 실행 중 동적으로 할당 받는다. 상황에 따라 실행 권한도 부여 받는다.

profile
회계+IT=???

0개의 댓글