PE 파일 형식 상세 정보

6734 단어
PE 파일은 Microsoft Win32 환경에서 실행 가능한 파일의 표준 형식입니다.
이른바 실행 가능한 파일이란 흔히 볼 수 있는 EXE 파일뿐만 아니라 DLL, SYS, VXD 등 파일도 모두 PE 형식에 속한다.
 
                                                                 |-------> DOS_MZ_Header ------> 구조체: IMAGEDOS_HEADER
                        |-------> DOS_Header ------|
                        |                                        |-------> DOS_Stub ------->"This program cannot be run in DOS mode."
                        |
PE 파일 형식 | -----> PEHeader -------> 구조체: IMAGENT_HEADERS
                        |
                        |
                        |-------> Section_Table -------->구조체:IMAGESECTION_HEADER
 
IMAGE_DOS_HEADER 구조:
typedef struct _IMAGE_DOS_HEADER  //         64byte。
{ WORD e_magic; // DOS 。 0x5A4D, , 0x4D5A。 ASCII "MZ"。 WORD e_cblp; WORD e_cp; WORD e_crlc; WORD e_cparhdr; WORD e_minalloc; WORD e_maxalloc; WORD e_ss; // DOS 。 WORD e_sp; // DOS SP。 WORD e_csum; WORD e_ip; // DOS [ IP] WORD e_cs; // DOS 。 WORD e_lfarlc; WORD e_ovno; WORD e_res[4]; WORD e_oemid; WORD e_oeminfo; WORD e_res2[10]; LONG e_lfanew; // PE 。 } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

 
IMAGE_NT_HEADERS 구조:
typedef struct _IMAGE_NT_HEADERS
{ DWORD Signature; // PE 。 0x00004550,ASCII "PE00"。 IMAGE_FILE_HEADER FileHeader; IMAGE_OPTIONAL_HEADER32 OptionalHeader; } IMAGE_NT_HEADERS32,
*PIMAGE_NT_HEADERS32;

 
IMAGE_FILE_HEADER 구조:
typedef struct _IMAGE_FILE_HEADER
{ WORD Machine; // 。 WORD NumberOfSections; // 。 , 。 DWORD TimeDateStamp; // 32 。 。 DWORD PointerToSymbolTable; // DWORD NumberOfSymbols; // 。 WORD SizeOfOptionalHeader; // IMAGE_OPTIONAL_HEADER32 。 WORD Characteristics; // 。 } IMAGE_FILE_HEADER,
*PIMAGE_FILE_HEADER;

 
IMAGE_OPTIONAL_HEADER32 구조체:
typedef struct _IMAGE_OPTIONAL_HEADER 
{ WORD Magic; // 。 BYTE MajorLinkerVersion; // 。 BYTE MinorLinkerVersion; // 。 DWORD SizeOfCode; // 。 DWORD SizeOfInitializedData; // 。 DWORD SizeOfUninitializedData; // 。 DWORD AddressOfEntryPoint; // 。 DWORD BaseOfCode; // DWORD BaseOfData; // DWORD ImageBase; // 。 DWORD SectionAlignment; // 。 DWORD FileAlignment; // WORD MajorOperatingSystemVersion; // 。 WORD MinorOperatingSystemVersion; // 。 WORD MajorImageVersion; // 。 WORD MinorImageVersion; // 。 WORD MajorSubsystemVersion; // 。 WORD MinorSubsystemVersion; // 。 DWORD Win32VersionValue; // 0。 DWORD SizeOfImage; // 。 DWORD SizeOfHeaders; // , DWORD CheckSum; // 。 WORD Subsystem; // 。 WORD DllCharacteristics; // DLL 。 DWORD SizeOfStackReserve; // 。 DWORD SizeOfStackCommit; // 。 DWORD SizeOfHeapReserve; // 。 DWORD SizeOfHeapCommit; // 。 DWORD LoaderFlags; DWORD NumberOfRvaAndSizes; IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; } IMAGE_OPTIONAL_HEADER32,
*PIMAGE_OPTIONAL_HEADER32;

 
IMAGE_DATA_DIRECTORY 구조체:
typedef struct _IMAGE_DATA_DIRECTORY
{ DWORD VirtualAddress; // 。 DWORD Size; // 。 } IMAGE_DATA_DIRECTORY,
*PIMAGE_DATA_DIRECTORY;

 
IMAGE_SECTION_HEADER 구조:
typedef struct _IMAGE_SECTION_HEADER
{ BYTE Name[IMAGE_SIZEOF_SHORT_NAME]; // 。 union { DWORD PhysicalAddress; // 。 DWORD VirtualSize; // } Misc; DWORD VirtualAddress; // ( )。 DWORD SizeOfRawData; // 。 DWORD PointerToRawData; // COFF 。 DWORD PointerToRelocations; // 。 , 。 DWORD PointerToLinenumbers; // 。 COFF , 。 WORD NumberOfRelocations; // 。 。 WORD NumberOfLinenumbers; // 。 DWORD Characteristics; // 。 } IMAGE_SECTION_HEADER,
*PIMAGE_SECTION_HEADER;

좋은 웹페이지 즐겨찾기