본문 바로가기
정리/Reversing

[Reversing] 메모리 레이아웃

by 멘멘 2023. 7. 8.

컴퓨터 구조와 관련하여 정리한 내용은 이전 포스팅에 있다.

https://menmen202007.tistory.com/36

 

[System Hacking] 컴퓨터 구조, 리눅스 메모리 구조

가상머신 컴퓨터를 에뮬레이팅 한 것 가상머신을 작동시키는 컴퓨터(host) / 가상 머신 안에서 작동하는 컴퓨터(guest) 컴퓨터 구조(Computer Architecture) 컴퓨터에 대한 기본 설계. 이에 맞추워 여러 하

menmen202007.tistory.com

컴퓨터 구조 파트를 참고하고 오면 좋을 것 같다. 

 

메모리 레이아웃(Memory Layout)

프로세스 가상 메모리(Virtual Memory)의 구성을 말함.

프로그램을 실행하면 os는 프로세스에게 메모리 공간을 할당해주는데 이 공간을 가상 메모리라고 부름.

 

프로세스 메모리 구조

섹션

윈도우의 PE파일은 PE 헤더와 1개 이상의 섹션으로 구성됨.

유사한 용도로 사용되는 데이터가 모여있는 영역을 말함.

이러한 섹션에 대한 정보는 PE 헤더에 적혀있음. 이 중 중요한 것은

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

윈도우는 이 정보를 참고하여 PE의 각 섹션을 가상 메모리의 적절한 세그먼트에 매핑.

.text 섹션

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

읽기 / 실행 권한 부여

.data 섹션

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

읽기 / 쓰기 권한 부여

.rdata 섹션

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

읽기 권한 부여

 

 

섹션이 아닌 메모리

스택

윈도우 프로세스의 각 쓰레드는 자신만의 스택 공간을 지님. (보통 지역변수나 함수의 리턴 주소가 저장)

읽기 / 쓰기 권한 부여 

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

프로그램이 여러 용도로 사용하기 위해 할당받는 공간 (모든 종류 데이터 저장 가능)

스택과 달리 큰 데이터 저장 가능, 전역적 접근 가능, 동적 할당 가능

읽기 / 쓰기 (가끔 실행) 권한 부여

 

섹션 역할 일반적 권한 사용 예
.text 실행 가능한 코드가 저장된 영역 읽기, 실행 main() 등의 함수 코드
.data 초기화된 전역 변수가 위치하는 영역 읽기와 쓰기 초기화된 전역 변수, 전역 상수
.rdata 초기화된 전역 상수나 임포트 데이터가 위치하는 영역 읽기 전용 전역 상수, 임포트 데이터
스택 일시적으로 저장하고 사용하는 임시 영역 읽기, 쓰기 지역 변수, 함수의 인자 등
자유롭게 사용할 수 있는 영역 읽기, 쓰기 malloc(), calloc() 등으로 할당 받은 메모리

 

'정리 > Reversing' 카테고리의 다른 글

[Reversing] IDA 설치  (0) 2023.07.23
[Reversing] 리버싱, 바이너리, 정적분석과 동적분석  (0) 2023.07.02

댓글