PE 파일 형식 상세 정보
이른바 실행 가능한 파일이란 흔히 볼 수 있는 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;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.