windows PE header数据结构分析

如何获取PE(Protable Executable)格式的header,PE的结构在winnt.h中可以获得,该头文件里定义了大量的PE数据结构体,方便我们对可执行文件数据结构进行分析。 如果我们不知道这些结构,我们可能需要逆向工程的技术对其结构进行分析猜想,还是包含一定的工作量。

PEheader的定义如下:

WORD的数据类型是short的无符号整型,e_magic是DOS签名,e_lfanew是NT的偏移量。一般的PE文件e_magic为0x5a4d

WORD的定义

typedef unsigned short WORD;

PE header

typedef struct _IMAGE_DOS_HEADER {
    WORD e_magic;
    WORD e_cblp;
    WORD e_cp;
    WORD e_crlc;
    WORD e_cparhdr;
    WORD e_minalloc;
    WORD e_maxalloc;
    WORD e_ss;
    WORD e_sp;
    WORD e_csum;
    WORD e_ip;
    WORD e_cs;
    WORD e_lfarlc;
    WORD e_ovno;
    WORD e_res[4];
    WORD e_oemid;
    WORD e_oeminfo;
    WORD e_res2[10];
    LONG e_lfanew;
} IMAGE_DOS_HEADER,*PIMAGE_DOS_HEADER;

示例代码

#include <stdio.h>
#include <windows.h>
#include <winnt.h>

int main() {
    FILE *file;
    IMAGE_DOS_HEADER header;
    file = fopen("cmake-build-debug\\c_demo.exe", "r");
    fread(&header, sizeof(header), 1, file);
    fclose(file);

    printf("doc: 0x%x\n", header.e_magic);
    return 0;
}

0 个评论

要回复文章请先登录注册