Reversing/PE File Format2012. 10. 29. 12:54

PE File Format 0x02



0x01. Dos Header


Windows에서 제공하는 winNT.h의 _IMAGE_DOS_HEADER 구조체입니다.


Dos 시절의 파일과의 호환성을 고려해서 만들었습니다.

IMAGE_DOS_HEADER 구조체의 크기는 0x40 입니다.

각각의 역할은 주석으로 설명되어 있습니다.

중요한 부분은 e_magice_lfanew입니다.


e_magic /* Dos signature입니다.

ASCII 값으로 "MZ"(4D 5A) 입니다.

모든 PE 파일은 시작 부분에 Dos signature("MZ")가 존재합니다.

MZ는 Dos 실행 파일을 설계한 Mark Zbikowski의 이니셜입니다. */

e_lfanew /* Long File Address of NEW exe header를 줄인 말입니다.

 앞의 Long은 자료형 DWORD를 의미합니다.

 NT header의 offset을 저장하고 있습니다.

 모든 PE 파일은 e_lfanew가 가리키는 위치에 NT header 구조체가 존재합니다. */


실행파일을 PEview로 열어본 모습입니다.

위쪽의 파란 줄의 상자는 Dos header를 나타내고

아래쪽의 파란 줄의 상자는 NT header를 나타냅니다.

시작 부분에 "MZ"가 있는 것을 확인할 수 있습니다.

Dos header의 마지막 DWORD는 00 01 00 00 으로 little endian을 적용해 0x00000100을 가리키고 있습니다.

해당 주소를 따라가면 NT header가 나오는 것을 확인할 수 있습니다.


Little endian의 개념을 모르시면 다음 글을 읽고 오세요.

 -> http://slimv.tistory.com/entry/Little-endian


0x02. Dos Stub


Dos header의 바로 다음에는 Dos stub가 있습니다.

Dos stub는 있는 경우도 있고 없는 경우도 있습니다.

Dos stub는 Dos mode로 실행한 경우 실행되는 코드입니다.

16-bit assembly code와 data의 혼합으로 이루어져 있습니다.


파란 줄의 상자 속의 코드가 Dos stub 입니다.

Dos header가 끝난 바로 다음에 위치하는 것을 확인할 수 있습니다.

일반적으로는 "This program cannot be run in DOS mode"

또는 "This program must be run under Win32"과 같은 메시지를 출력하고 종료합니다.


'Reversing > PE File Format' 카테고리의 다른 글

PE File Format 0x06  (0) 2012.11.11
PE File Format 0x05  (0) 2012.11.07
PE File Format 0x04  (0) 2012.10.31
PE File Format 0x03  (0) 2012.10.29
PE File Format 0x01  (1) 2012.10.28
Posted by slimV