0x01IMAGE_DOS_HEADER

首先是dos头

typedef struct _IMAGE_DOS_HEADER {      // DOS .EXE header
    WORD   e_magic;                     // Magic number
    WORD   e_cblp;                      // Bytes on last page of file
    WORD   e_cp;                        // Pages in file
    WORD   e_crlc;                      // Relocations
    WORD   e_cparhdr;                   // Size of header in paragraphs
    WORD   e_minalloc;                  // Minimum extra paragraphs needed
    WORD   e_maxalloc;                  // Maximum extra paragraphs needed
    WORD   e_ss;                        // Initial (relative) SS value
    WORD   e_sp;                        // Initial SP value
    WORD   e_csum;                      // Checksum
    WORD   e_ip;                        // Initial IP value
    WORD   e_cs;                        // Initial (relative) CS value
    WORD   e_lfarlc;                    // File address of relocation table
    WORD   e_ovno;                      // Overlay number
    WORD   e_res[4];                    // Reserved words
    WORD   e_oemid;                     // OEM identifier (for e_oeminfo)
    WORD   e_oeminfo;                   // OEM information; e_oemid specific
    WORD   e_res2[10];                  // Reserved words
    LONG   e_lfanew;                    // File address of new exe header
  } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

WindowsPE PE头

只有2个字段有用 magic 就是 mz 头 标识 必须有固定值    和 fanew  foa 的 3c位置  指向 pe地址   

WindowsPE PE头

 

 

 到100h

WindowsPE PE头

 

 

0x02IMAGE_NT_HEADERS

pe头的 整体的区域大概就是

WindowsPE PE头

 

 

 

dos头完了接着就是pe的

typedef struct _IMAGE_NT_HEADERS {
    DWORD Signature;
    IMAGE_FILE_HEADER FileHeader;
    IMAGE_OPTIONAL_HEADER32 OptionalHeader;
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;
Signature=就是pe/0  双字固定值 接在就是
WindowsPE PE头

 

 WindowsPE PE头

 

 

 WindowsPE PE头

 

 

 


0x03
IMAGE_FILE_HEADER

typedef struct _IMAGE_FILE_HEADER {
    WORD    Machine;
    WORD    NumberOfSections;
    DWORD   TimeDateStamp;
    DWORD   PointerToSymbolTable;
    DWORD   NumberOfSymbols;
    WORD    SizeOfOptionalHeader;
    WORD    Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;

WindowsPE PE头

 

 

 WindowsPE PE头

 

 

 WindowsPE PE头

 

 

 WindowsPE PE头

 

 

 WindowsPE PE头

 

 

 WindowsPE PE头

 

 

 WindowsPE PE头

 

 

 WindowsPE PE头

 

 

 WindowsPE PE头

 

 

 WindowsPE PE头

 

 

 WindowsPE PE头

 

 

 

 0x04IMAGE_OPTIONAL_HEADER

typedef struct _IMAGE_OPTIONAL_HEADER {
    //
    // Standard fields.
    //

    WORD    Magic;
    BYTE    MajorLinkerVersion;
    BYTE    MinorLinkerVersion;
    DWORD   SizeOfCode;
    DWORD   SizeOfInitializedData;
    DWORD   SizeOfUninitializedData;
    DWORD   AddressOfEntryPoint;
    DWORD   BaseOfCode;
    DWORD   BaseOfData;

    //
    // NT additional fields.
    //

    DWORD   ImageBase;
    DWORD   SectionAlignment;
    DWORD   FileAlignment;
    WORD    MajorOperatingSystemVersion;
    WORD    MinorOperatingSystemVersion;
    WORD    MajorImageVersion;
    WORD    MinorImageVersion;
    WORD    MajorSubsystemVersion;
    WORD    MinorSubsystemVersion;
    DWORD   Win32VersionValue;
    DWORD   SizeOfImage;
    DWORD   SizeOfHeaders;
    DWORD   CheckSum;
    WORD    Subsystem;
    WORD    DllCharacteristics;
    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;

WindowsPE PE头

 

 

 WindowsPE PE头

 

 

 WindowsPE PE头

 

 WindowsPE PE头

 

 WindowsPE PE头

 

 WindowsPE PE头

 

 WindowsPE PE头

 

 WindowsPE PE头

 

 WindowsPE PE头

 

 WindowsPE PE头

 

 WindowsPE PE头

 

 WindowsPE PE头

 

 WindowsPE PE头

 

 WindowsPE PE头

 

 WindowsPE PE头

 

 WindowsPE PE头

 

 WindowsPE PE头

 

 0x05IMAGE_DATA_DIRECTORY

让后数据目录表 

WindowsPE PE头

 

 

 固定值16个

typedef struct _IMAGE_DATA_DIRECTORY {
    DWORD   VirtualAddress;
    DWORD   Size;
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;

WindowsPE PE头

 

 

 WindowsPE PE头

 

 

 WindowsPE PE头

 

 

 WindowsPE PE头

 

 0x06IMAGE_SECTION_HEADER

接着就是节表

WindowsPE PE头

 

 

typedef struct _IMAGE_SECTION_HEADER {
    BYTE    Name[IMAGE_SIZEOF_SHORT_NAME];
    union {
            DWORD   PhysicalAddress;
            DWORD   VirtualSize;
    } Misc;
    DWORD   VirtualAddress;
    DWORD   SizeOfRawData;
    DWORD   PointerToRawData;
    DWORD   PointerToRelocations;
    DWORD   PointerToLinenumbers;
    WORD    NumberOfRelocations;
    WORD    NumberOfLinenumbers;
    DWORD   Characteristics;
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;

WindowsPE PE头

 

 

 WindowsPE PE头

 

 WindowsPE PE头

 

 WindowsPE PE头

 

 

WindowsPE PE头

 

 

 

WindowsPE PE头

 

相关文章: