출처 : http://www.reversecore.com
PE(Portable Executable) File Format
PE 파일의 종류는 다음과 같다.
∙ 실행 파일 계열 : EXE, SCR
∙ 라이브러리 계열 : DLL, OCX
∙ 드라이버 계열 : SYS
∙ 오브젝트 파일 계열 : OBJ
엄밀히 따지자면 OBJ(오브젝트) 파일을 제외한 모든 파일들은 실행가능한 파일이다.
DLL, SYS 파일 등은 쉘(Explorer.exe)에서 직접 실행 할 수는 없지만,
다른 형태의 방법(디버거, 서비스 등)을 이용하여 실행이 가능한 파일들이다.
간단한 설명을 위해 메모장(notepad.exe) 파일을 hex editor를 이용해 열어보자.
위의 그림은 notepad.exe 파일의 시작 부분이며, PE header 부분이다.
이 PE header에 notepad.exe 파일이 실행되기 위한 모든 정보가 기록되어 있다.
어떻게 메모리에 적재되고, 어디서부터 실행되어야 하며, 실행에 필요한 DLL들은 어떤 것들이 있고,
필요한 Stack과 Heap 메모리의 크기를 얼마로 할 것인지 등,
수 많은 정보들이 PE header에 구조체 형식으로 저정되어 있다.
즉, PE File Format을 공부한다는 것은 PE header 구조체를 공부한다는 것과 같은 말이 된다.
Basic Structure
다음은 일반적인 PE File의 기본 구조이다. (notepad.exe)
<Fig. 2> 는 notepad.exe 파일이 메모리에 적재(loading or mapping)될 때의 모습을 나타낸 그림이다.
∙ DOS header 부터 Section header 까지를 PE Header, 그 밑의 Section 들을 PE Body 라고 한다.
∙ 파일에서는 offset 으로, 메모리에서는 VA(Virtual Address) 로 위치를 표현한다.
∙ 파일이 메모리에 로딩되면 모양이 달라진다. (Section의 크기, 위치 등)
∙ 파일의 내용은 보통 코드(".text" 섹션), 데이터(".data" 섹션), 리소스(".rsrc") 섹션에 나뉘어서 저장된다.
- 반드시 그런것은 아니며 개발도구(VB/VC++/Delphi/etc)와 빌드 옵션에 따라서 섹션의 이름, 크기, 개수, 저장내용 등은 달라진다. 중요한 것은 섹션이 나뉘어서 저장 된다는 것!
∙ Section Header에는 각 Section에 대한 파일 / 메모리에서의 크기, 위치, 속성 등이 정의 되어 있다.
∙ PE Header의 끝부분과 각 Section들의 끝에는 NULL padding 이라고 불리는 영역이 존재한다.
- 컴퓨터에서 파일, 메모리, 네트워크 패킷 등을 처리할 때 효율을 높이기 위해 최소 기본 단위 개념을 사용하는데, PE 파일에도 같은 개념이 적용된 것이다.
∙ 파일 / 메모리에서 섹션의 시작위치는 각 파일 / 메모리의 최소 기본 단위의 배수에 해당하는 위치여야 하고, 빈 공간은 NULL로 채운다.
- <Fig. 2>를 보면 각 섹션의 시작이 딱딱 끊어지는 것을 볼 수 있다.
VA & RVA
VA (Virtual Address) : 프로세스 가상 메모리의 절대 주소
RVA (Relative Virtual Address) : 어느 기준위치(ImageBase) 에서부터의 상대 주소
VA 와 RVA 의 관계는 아래 식과 같다.
RVA + ImageBase = VA
PE header 내의 많은 정보는 RVA 형태로 된 것들이 많다.
그 이유는 PE 파일(주로 DLL)이 프로세스 가상 메모리의 특정 위치에 로딩되는 순간 이미 그 위치에 다른 PE 파일(DLL) 이 로딩 되어 있을 수 있기 때문이다.
위와 같은 상황이 발생했을 시 재배치(Relocation) 과정을 통해서 비어 있는 다른 위치에 로딩되어야 하는데,
만약 PE header 정보들이 VA (Virtual Address - 절대주소)로 되어 있다면 정상적인 엑세스가 이루어질 수 없다.
정보들이 RVA (Relative Virtual Address - 상대주소) 로 되어 있으면 Relocation 이 발생하더라도
기준위치에 대한 상대주소는 변하지 않기 때문에 아무런 문제없이 원하는 정보에 엑세스 할 수 있게 된다.'정상을향해 > Program Analysis' 카테고리의 다른 글
PE File Format (4) (0) | 2013.11.10 |
---|---|
PE File Format (3) (0) | 2013.11.10 |
PE File Format (2) (0) | 2013.11.10 |
Calling Convention (0) | 2013.11.10 |
Stack Frame (0) | 2013.11.10 |
IA-32 Register (0) | 2013.11.10 |