锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

2021-11-01

时间:2023-07-30 10:07:18 header11连接器

PE之DOS头,NT头相关记录

  • 一、DOS头相关
    • 上 _IMAGE_DOS_HEADER结构体
  • 二、NT头相关
    • 上_IMAGE_NT_HEADERS结构体
        • 1、上IMAGE_FILE_HEADER结构体
        • 2、上_IMAGE_OPTIONAL_HEADER结构体

一、DOS头相关

上 _IMAGE_DOS_HEADER结构体

除了介绍这里最重要的话e_magic其余的字段不介绍,感兴趣的学生可以查询相关信息

typedef struct _IMAGE_DOS_HEADER { 
              // DOS .EXE header     WORD   e_magic;                     // (最重要的是,它可以作为判断是否作为分析PE文件的第一个标志)     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;

二、NT头相关

上_IMAGE_NT_HEADERS结构体

typedef struct _IMAGE_NT_HEADERS { 
        
    DWORD Signature;   //PE文件标记(判断是否为PE文件的第二个标志,可以与介绍到的e_magic 连用)
    IMAGE_FILE_HEADER FileHeader;  //标准文件头(非常重要)
    IMAGE_OPTIONAL_HEADER32 OptionalHeader; //扩展文件头(非常重要)
} IMAGE_NT_HEADERS32, *PIMAGE_NT_HEADERS32;

这里着重介绍一下IMAGE_FILE_HEADER(标准文件头)与IMAGE_OPTIONAL_HEADER32(扩展文件头)

1、上IMAGE_FILE_HEADER结构体

typedef struct _IMAGE_FILE_HEADER { 
        
    WORD    Machine;   //文件的运行平台
    WORD    NumberOfSections; //节(区段)的数量
    DWORD   TimeDateStamp; //文件创建时间
    DWORD   PointerToSymbolTable; //符号表偏移
    DWORD   NumberOfSymbols; //符号个数
    WORD    SizeOfOptionalHeader; //扩展头的大小
    WORD    Characteristics; //记录PE文件的一些属性
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;

2、上_IMAGE_OPTIONAL_HEADER结构体

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

    WORD    Magic;  //标志这是一个什么类型的PE文件,32位一般是0x010B,64位的PE文件一般是0x020B,还有一个0x170,代表ROM镜像
    BYTE    MajorLinkerVersion; //连接器主版本
    BYTE    MinorLinkerVersion; //连接器次版本
    DWORD   SizeOfCode; //指所有代码区段(节)的总大小
    DWORD   SizeOfInitializedData; //已初始化数据的总大小
    DWORD   SizeOfUninitializedData; //未初始化数据的总大小,在磁盘中不占用空间,在加载到内存中后,会预留这么大的空间。一般存储在.bss区段(节)中
    DWORD   AddressOfEntryPoint;  //程序开始执行的相对虚拟地址(RVA),也叫OEP,Orginal Entry Point,源入口点
    DWORD   BaseOfCode; //起始代码的相对虚拟地址(RVA)
    DWORD   BaseOfData; //起始数据的相对虚拟地址(RVA)

    //
    // NT additional fields.
    //

    DWORD   ImageBase;  //默认加载基址(如果没有加载到这个地址,会发生重定位)
    DWORD   SectionAlignment; //块对齐数,就是在映射到内存中的区段(节)对齐,这个数必须大小文件对齐数,一般是0x1000
    DWORD   FileAlignment; //文件对齐数,就是在硬盘中的文件的区段(节)对齐,一般是0x200
    WORD    MajorOperatingSystemVersion; //主操作系统版本号 
    
    WORD    MinorOperatingSystemVersion; //次操作系统版本号
    //主映像版本
    WORD    MajorImageVersion; //主映像版本
    
    WORD    MinorImageVersion; //次映像版本
    WORD    MajorSubsystemVersion; // 主子系统版本号
    WORD    MinorSubsystemVersion; // 次子系统版本号
    DWORD   Win32VersionValue; //保留值,一般是0
    DWORD   SizeOfImage; //把文件加载进内存,所需要的内存大小,注意是进行了块对齐之后
    DWORD   SizeOfHeaders; // 所有头部大小,一般也是文件主体相对文件起始的偏移
    DWORD   CheckSum; //校验和对于驱动和一些系统dll来说需要校验(使用IMAGEHLP.DLL中的CheckSumMappedFile API)
    WORD    Subsystem; //子系统
    WORD    DllCharacteristics; //指示Dll特征的标志
    DWORD   SizeOfStackReserve; //表示进程中栈可以增长到最大值一般1MB
    DWORD   SizeOfStackCommit; //表示进程中栈的初始值,据说也是栈每次分配增长的值一般4KB
    DWORD   SizeOfHeapReserve; //表示进程中堆可以增长到的最大值一般1MB
    DWORD   SizeOfHeapCommit; //表示进程堆的初始值
    DWORD   LoaderFlags; //
    DWORD   NumberOfRvaAndSizes; //数据目录个数,也就是下面字段中数组的个数
    IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES]; // 数据目录表
} IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;

本文参考自 <黑客免杀攻防> 及

锐单商城拥有海量元器件数据手册IC替代型号,打造电子元器件IC百科大全!

相关文章