MS는 EXE와 DLL이 갖는 파일 구조를 PE 파일 포맷이라고 명명했다.
이때 PE는 "Portable Executable"의 약자로, 이 포맷으로 구성된 PE 파일들은 플랫폼에 관계 없이 윈도우 운영체제가 돌아가는 시스템이면 어디서든 (Portable) 실행 가능 (Executable)하다는 의미에서 PE라는 이름을 붙였다.
WinNT.h 헤더 파일 내의 PE 관련 구조체들은 '파일'이라는 명칭 대신 '이미지(Image)'라는 명칭으로 표현된다.
파일이 아니고 왜 이미지일까? 이때 말하는 이미지는 JPEG나 BMP, GIF 등으로 알려진, 그림이나 사진과 같은 이미지를 의미하는 것이 아니라 Image라는 단어의 어원적 의미로 사용된다. 어떤 실체에 대한 그림자, 허상, 그것의 반영이라는 의미에서의 이미지다.
사실 PE 파일은 하드디스크에 파일로 존재하지만, 그것이 실행되기 위해 메모리로 로드될 떄에는 일반 데이터 파일이 메모리에 로드되는 방식과는 전혀 다른 방식으로 로드된다. 한 프로세스에 할당되는 4기가(32비트) 또는 8기가(64비트)바이트의 가상 주소 공간을 유지하기 위해 가상 메모리 관리자 (Virtual Memory Manager, 이하 VMM)는 페이지 파일이라는 덩치 큰 스와핑(Swapping) 영역을 하드디스크에 유지하며, 이 페이지 파일과의 적절한 스와핑, 매핑을 통해 프로세스에게 마치 4기가 또는 8기가의 가상 공간을 실제로 제공해주는 것처럼 그렇게 프로세스를 속이고 있는 것이다.
프로세스는 사실 VMM이 만들어준 매트릭스 세계에 살고 있다고 봐도 무방하다. 하지만 PE 파일이 로드될 때 VMM은 페이지 파일을 사용하지 않고 PE 파일 자체를 마치 페이지 파일처럼 가상 주소 공간에 그대로 매핑한다. 윈도우 프로그래머들이 프로세스 간 통신을 위해 애용하는 공유 메모리(Shared Memory) 메커니즘을 통해 PE 파일 자체를 직접 가상 주소 공간에 매핑해버리는 것이다.
'공유 메모리'라고 알려진 IPC 방식은 실제 메모리에 매핑된 파일(Memory Mapped File)이며, 어찌보면 원래 PE 파일을 효율적으로 메모리에 로드하기 위해 MS가 고안해낸 방식을 그 범위를 넓혀 IPC에도 이용할 수 있도록 다른 사용 용도를 제안한 것일 수 있다.
이미지라는 것은 바로 메모리에 매핑된 하드디스크의 PE 파일의 상(像, 모양), 이미지인 것이다.
PE+란?
MS는 64비트 PE에 'PE+'라고 이름을 붙였지만, 이 이름 역시 32 비트를 그대로 수용하면서 기존 PE 포맷에 새로운 요소를 추가한 것이라고 생각하면 된다. 새로운 요소로 대표적인 것이 32비트 PE에는 없었던 '예외 섹션'일 것이다.
'리버싱 > 윈도우 리버싱' 카테고리의 다른 글
RVA와 섹션 (0) | 2021.01.21 |
---|---|
PE 파일의 전체 구조 (0) | 2021.01.21 |
WinDbg, mona세팅 (구/신 버전 다 있음) (0) | 2021.01.01 |
WinDbg Preview (0) | 2020.12.31 |
디버깅 환경 (0) | 2020.12.29 |