티스토리 뷰
메모리 레이아웃(Memory Layout)이란 프로세스 가상 메모리(Virtual Memory)의 구성을 말합니다. 프로그램을 실행하면 운영체제는 프로세스에게 사용 가능한 메모리 공간을 할당합니다. 이 공간을 가상 메모리 라고 부릅니다. 메모리는 바이너리 실행에 중요한 역할을 하므로
프로세스 메모리 구조
- 섹션
윈도우의 PE파일은 PE헤더와 1개이상의 섹션으로 구성되어있습니다.
ex) ".text" 섹션에는 PE의 코드가 적혀있고, ".data"에는 PE가 실행중에 참조하는 데이터가 적혀있습니다.
섹션에 대한 정보는 PE헤더에 적혀있습니다. PE헤더에는 여러가지 정보가 담기는데 섹션과 관련된 데이터 중 중요한것은
* 섹션의 이름
* 섹션의 크기
* 섹션이 로드될 주소의 오프셋
* 섹션의 속성과 권한
등이 있습니다.
윈도우는 PE를 실행할 때, 이 정보를 참조하여 PE의 각 섹션들을 가상 메모리의 적절한 세그먼트에 매핑합니다. PE에 필수로 존재하는 섹션은 없습니다.
- .text [ 권한 : 읽기 O / 쓰기 X / 실행 O ]
해당 섹션은 실행 가능한 기계 코드가 위치하는 영역입니다.
프로그램이 동작될려면 코드를 실행할 수 있어야 하므로 읽기와 실행 권한이 부여됩니다. 반면 쓰기 권한이 있으면 공격자가 악의적인 코드를 삽입하기가 쉬워지므로, 대부분의 현대 운영체제에서는 쓰기 권한을 부여하지 않습니다.
- .data [ 권한 : 읽기 O / 쓰기 O / 실행 X ]
해당 섹션은 컴파일 시점에 값이 정해진 전역 변수들이 위치합니다. CPU가 이 섹션의 데이터를 읽고 쓸 수 있어야 하므로, 읽기/쓰기 권한이 부여됩니다.
- .rdata [ 권한 : 읽기 O / 쓰기 X / 실행 X ]
해당 섹션은 컴파일 시점에 값이 정해진 전역 상수와 참조할 DLL 및 외부 함수들의 정보가 저장됩니다. CPU가 이 섹션에 데이터를 읽어야 하므로 읽기 권한이 부여되지만, 쓰기 권한은 부여되지 않습니다.
섹션이 아닌 메모리
- 스택 [ 권한 : 읽기 O / 쓰기 O / 실행 X ]
윈도우즈 프로세스의 각 쓰레드는 자신만의 스택 공간을 가지고 있고, 보통 지역 변수나 함수의 리턴 주소가 저장됩니다.
참고로 스택에 대해서 '아래로 자란다' 라는 표현을 사용하는데, 이는 스택이 확장될 때, 기존 주소보다 낮은 주소로 확장되기 때문입니다.
사용 예) 지역 변수 , 함수의 인자 등
- 힙 [ 권한 : 읽기 O / 쓰기 O / 실행 유동적 ]
힙은 프로그램이 여러 용도로 사용하기 위해 할당받는 공간입니다. 스택과의 차이점으로는 큰 데이터를 저장할 수 있고 전역적으로 접근 가능하게 설계되었습니다. 또한 실행중 동적으로 할당받을 수 있습니다.
사용 예) malloc, calloc 등으로 할당 받은 메모리
'개발 > 해킹' 카테고리의 다른 글
| 리버스 엔지니어링 (2) (0) | 2024.01.29 |
|---|---|
| 리버스 엔지니어링 (1) (0) | 2024.01.19 |
| 리눅스 명령어 정리 (0) | 2024.01.14 |
- Total
- Today
- Yesterday