pe结构

 

DOS头(DOS MZ header):它是一个IMAGE_DOS_HEADER结构,定义如下:

IMAGE_DOS_HEADER STRUCT     ;64个字节

  e_magic           WORD      ?     ;DOS头标记,其值固定为5A4Dh

  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             WORD   4 dup(?)

  e_oemid           WORD      ?

  e_oeminfo         WORD      ?

  e_res2            WORD  10 dup(?)

  e_lfanew          DWORD      ?    ;指向 PE header 的文件偏移量

IMAGE_DOS_HEADER ENDS

 

DOS代码(DOS stub

 

 

 

 

PE头(PE header):它是一个IMAGE_NT_HEADERS 结构,定义如下:

IMAGE_NT_HEADERS STRUCT

  Signature         DWORD                   ?     ;PE头标记

  FileHeader        IMAGE_FILE_HEADER       <>    ;文件头/20个字节

  OptionalHeader    IMAGE_OPTIONAL_HEADER32 <>    ;任选头

IMAGE_NT_HEADERS ENDS

 

文件头(FileHeader):它是一个IMAGE_FILE_HEADER结构,定义如下:

IMAGE_FILE_HEADER STRUCT    ;20个字节

  Machine               WORD    ?

  NumberOfSections      WORD    ? ;文件的节数目

  TimeDateStamp         DWORD   ? ;文件创建日期和时间

  PointerToSymbolTable  DWORD   ?

  NumberOfSymbols       DWORD   ?

  SizeOfOptionalHeader  WORD    ?    ; 指示紧随本结构之后的OptionalHeader 结构大小

  Characteristics       WORD    ?; 关于文件信息的标记,比如文件是exe还是dll

IMAGE_FILE_HEADER ENDS

 

任选头(OptionalHeader):它是一个IMAGE_OPTIONAL_HEADER32结构,定义如下:

IMAGE_OPTIONAL_HEADER32 STRUCT

  Magic                         WORD       ?

  MajorLinkerVersion            BYTE       ?

  MinorLinkerVersion            BYTE       ?

  SizeOfCode                    DWORD      ?

  SizeOfInitializedData         DWORD      ?

  SizeOfUninitializedData       DWORD      ?

  AddressOfEntryPoint           DWORD      ?; PE装载器准备运行的第一个指令的RVA

  BaseOfCode                    DWORD      ?

  BaseOfData                    DWORD      ?

  ImageBase                     DWORD      ?; PE文件的优先装载地址(映像基址)

  SectionAlignment              DWORD      ?; 内存中节对齐的粒度

  FileAlignment                 DWORD      ?; 文件中节对齐的粒度

  MajorOperatingSystemVersion   WORD       ?

  MinorOperatingSystemVersion   WORD       ?

  MajorImageVersion             WORD       ?

  MinorImageVersion             WORD       ?

  MajorSubsystemVersion         WORD       ?

  MinorSubsystemVersion         WORD       ?

  Win32VersionValue             DWORD      ?

  SizeOfImage                   DWORD      ?; 内存中整个PE映像体的尺寸

  SizeOfHeaders                 DWORD      ?; 所有头+节表的大小

  CheckSum                      DWORD      ?

  Subsystem                     WORD       ?; NT用来识别PE文件属于哪个子系统

  DllCharacteristics            WORD       ?

  SizeOfStackReserve            DWORD      ?

  SizeOfStackCommit             DWORD      ?

  SizeOfHeapReserve             DWORD      ?

  SizeOfHeapCommit              DWORD      ?

  LoaderFlags                   DWORD      ?

  NumberOfRvaAndSizes           DWORD      ?

  DataDirectory                 IMAGE_DATA_DIRECTORY 16 dup(<>);数据目录

IMAGE_OPTIONAL_HEADER32 ENDS

 

数据目录(DataDirectory):它是一个IMAGE_DATA_DIRECTORY结构,定义如下:

IMAGE_DATA_DIRECTORY STRUCT

  VirtualAddress    DWORD      ?;指向 IMAGE_IMPORT_DESCRIPTOR 数组的RVA

  isize             DWORD      ?

IMAGE_DATA_DIRECTORY ENDS

 

 

节表(Section table):它是一个IMAGE_SECTION_HEADER结构,定义如下

IMAGE_SECTION_HEADER STRUCT     ;40个字节

    Name1                 db        8 dup(?)  ;节名

    union Misc

        PhysicalAddress   dd  ?

        VirtualSize       dd      ?

    ends

    VirtualAddress        dd       ?; 本节的RVA(相对虚拟地址)

    SizeOfRawData         dd        ?; 经过文件对齐处理后节尺寸

    PointerToRawData      dd     ?; 这是节基于文件的偏移量

    PointerToRelocations  dd ?

    PointerToLinenumbers  dd ?

    NumberOfRelocations   dw  ?

    NumberOfLinenumbers   dw  ?

    Characteristics       dd      ?; 包含标记以指示节属性

IMAGE_SECTION_HEADER ENDS:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值