본문 바로가기

Reversing/Dreamhack : Reverse Engineering

Background: Windows Memory Layout

 

Memory Layout(메모리 레이아웃)이란 프로세스 Virtual Memory(가상 메모리)의 구성을 말한다

  • 프로그램을 실행하면 OS는 프로세스에서 사용 가능한 메모리 공간을 할당함
  • 이 공간을 가상 메모리라고 부름
  • OS는 프로그램의 정보를 참고해서 프로그램 데이터들이 적절한 영역에 저장되게함.
  • 프로세스가 사용할 가상 메모리를 용도별로 나누고, 적절하게 저장함
  • 유사한 데이터를 모아서 저장하기 때문에 운영체제는 각 구획에 적절한 권한을 부여할 수 있음

프로세스 메모리 구조

섹션

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

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

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

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

윈도우는 PE를 실행할 때, PE 헤더에 들어있는 정보를 참조하여 PE의 각 섹션들을 가상 메모리의 적절한 세그먼트에 매핑함.

 

.text

실행 가능한 기계 코드가 위치하는 영역

  • 프로그램이 동작하려면 코드를 실행할 수 있어야 하므로 이 세그먼트에는 읽기/실행 권한이 부여됨
  • 쓰기 권한이 있으면 악성 코드를 삽입하기가 쉬워서 보통 쓰기 권한을 제거함
  • 정수 31337을 반환하는 main함수가 컴파일 되면 554889e5b8697a00005dc3라는 기계 코드로 변환되는데, 이 기계 코드가 코드 세그먼트에 위치하게 됨
  • 함수 → 기계코드로 변환 → 코드 세그먼트에 저장

 

.data

컴파일 시점에 값이 정해진 전역 변수들이 위치함

  • CPU가 이 섹션의 데이터를 읽고 쓸 수 있어야 하므로, 읽기/쓰기 권한이 부여됨
int data_num = 31337;
char data_rwstr[] = "writable_data";        // data

int main() { ... }

 

.rdata

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

  • CPU가 이 섹션의 데이터를 읽을 수 있어야 하므로, 읽기 권한이 부여되지만 쓰기 권한은 부여되지 않음
const char data_rostr[] = "readonly_data";
char *str_ptr = "readonly";  // str_ptr은 .data, 문자열은 .rdata

int main() { ... }

str_ptr은 “readonly”라는 문자열을 가리키고 있는데, 
str_ptr은 전역 변수로서 .data에 위치하지만, 
“readonly”는 상수 문자열로 취급되어 .rdata에 위치함

 

섹션이 아닌 메모리

 

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

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

 

스택

윈도우즈 프로세스의 각 스레드는 자신만의 스택 공간을 가지고 있음

보통 지역 변수함수의 리턴 주소가 저장됨.

  • 읽기/쓰기 권한이 부여됨
  • 스택이 확장될 때, 기존 주소보다 낮은 주소로 확장됨.

여러 용도로 사용하기 위해 할당 → 모든 종류의 데이터가 저장될 수 있음

  • 스택보다 큰 데이터 저장 가능
  • 전역적으로 접근이 가능하도록 설계되었음
  • 실행 중 동적으로 할당받음
  • 읽기/쓰기 권한 + 상황에 따라 실행 권한



'Reversing > Dreamhack : Reverse Engineering' 카테고리의 다른 글

Quiz: x86 Assembly 1  (0) 2025.04.16
x86 Assembly🤖: Essential Part  (0) 2025.04.16
Background: Computer Architecture  (0) 2025.04.16
Background: Static Analysis vs. Dynamic Analysis  (0) 2025.04.16
Background : Binary  (0) 2025.04.16