PE文件DOS头与PE头解析

在Windows下所谓PE文件即Portable Executable,意为可移植的可执行的文件。

常见的.EXE、.DLL、.OCX、.SYS、.COM都是PE文件。

PE文件组成结构

PE文件结构:DOS头+PE头+节表+.data/.rdata/.text 而今天我们就来具体了解一下PE文件的DOS头和PE头的结构成员与部分成员的作用。

938563-20161114164613842-634193603.png

1、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;

结构体中有两个重要的数据成员。第一个为e_magic,这个必须为MZ,据说是老外的一个名字,即0x5A4D。另一个重要的数据成员是最后一个成员e_lfanew,这个成员的值为IMAGE_NT_HEADERS的偏移。其中,*e_lfanew这个字段的值: PE Header 在磁盘文件中相对于文件开始的偏移地址.

QQ20190125-214401@2x.png

2x.png可以看出 PE Header 是从 文件开始偏移0x0100个字节开始的 也就是256个字节 中间有一部分是垃圾数据

1.png

2、NT头部结构体

typedef struct _IMAGE_NT_HEADERS 
{

    DWORD Signature;                                   //标记(重要,判断是否为PE文件的第二个标志)

    IMAGE_FILE_HEADER FileHeader;                      //文件头(重要,存储着PE文件的基本信息)

    IMAGE_OPTIONAL_HEADER32 OptionalHeader;  //扩展头(重要,存储着关于PE文件时加载的信息)

} IMAGE_NT_HEADERS32, * PIMAGE_NT_HEADERS32;

DWORD Signature; 它是一个PE标记 占4个字节

QQ20190127-152241@2x.png

接着就是一个标准PE头

IMAGE_FILE_HEADER fileheader:

typedef struct _IMAGE_FILE_HEADER {

    WORD      Machine;                         1  (文件的运行平台)
  
    WORD      NumberOfSections;               2  (区段的数量)

    DWORD   TimeDateStamp;                     3  (文件创建时间)

    DWORD   PointerToSymbolTable;             4  (符号表偏移,用于调试)

    DWORD   NumberOfSymbols;                 5   (符号个数,用于调试)

    WORD    SizeOfOptionalHeader;            6   (扩展头的大小)

    WORD    Characteristics;                    7   (PE文件的一些属性)

} IMAGE_FILE_HEADER, * PIMAGE_FILE_HEADER;

QQ20190127-153413@2x.png

在接着就是可选PE头

可选.png

PE标记

标准PE头

可选PE头

它们3个组成称作NT头

本博客所有文章如无特别注明均为原创。作者:odaycaogen复制或转载请以超链接形式注明转自 123``blog
原文地址《PE文件DOS头与PE头解析

相关推荐

发表评论

路人甲 表情
Ctrl+Enter快速提交

网友评论(0)