zoukankan      html  css  js  c++  java
  • PE Header中的OptionalHeader

    typedef struct _IMAGE_OPTIONAL_HEADER
    {
    //
    // Standard fields.
    //
    +18h WORD Magic; // 标志字, ROM 映像(0107h),普通可执行文件(010Bh)
    +1Ah BYTE MajorLinkerVersion; // 链接程序的主版本号
    +1Bh BYTE MinorLinkerVersion; // 链接程序的次版本号
    +1Ch DWORD SizeOfCode; // 所有含代码的节的总大小
    +20h DWORD SizeOfInitializedData; // 所有含已初始化数据的节的总大小
    +24h DWORD SizeOfUninitializedData; // 所有含未初始化数据的节的大小
    +28h DWORD AddressOfEntryPoint; // 程序执行入口RVA
    +2Ch DWORD BaseOfCode; // 代码的区块的起始RVA
    +30h DWORD BaseOfData; // 数据的区块的起始RVA
    //
    // NT additional fields. 以下是属于NT结构增加的领域。
    //
    +34h DWORD ImageBase; // 程序的首选装载地址
    +38h DWORD SectionAlignment; // 内存中的区块的对齐大小
    +3Ch DWORD FileAlignment; // 文件中的区块的对齐大小
    +40h WORD MajorOperatingSystemVersion; // 要求操作系统最低版本号的主版本号
    +42h WORD MinorOperatingSystemVersion; // 要求操作系统最低版本号的副版本号
    +44h WORD MajorImageVersion; // 可运行于操作系统的主版本号
    +46h WORD MinorImageVersion; // 可运行于操作系统的次版本号
    +48h WORD MajorSubsystemVersion; // 要求最低子系统版本的主版本号
    +4Ah WORD MinorSubsystemVersion; // 要求最低子系统版本的次版本号
    +4Ch DWORD Win32VersionValue; // 莫须有字段,不被病毒利用的话一般为0
    +50h DWORD SizeOfImage; // 映像装入内存后的总尺寸
    +54h DWORD SizeOfHeaders; // 所有头 + 区块表的尺寸大小
    +58h DWORD CheckSum; // 映像的校检和
    +5Ch WORD Subsystem; // 可执行文件期望的子系统
    +5Eh WORD DllCharacteristics; // DllMain()函数何时被调用,默认为 0
    +60h DWORD SizeOfStackReserve; // 初始化时的栈大小
    +64h DWORD SizeOfStackCommit; // 初始化时实际提交的栈大小
    +68h DWORD SizeOfHeapReserve; // 初始化时保留的堆大小
    +6Ch DWORD SizeOfHeapCommit; // 初始化时实际提交的堆大小
    +70h DWORD LoaderFlags; // 与调试有关,默认为 0
    +74h DWORD NumberOfRvaAndSizes; // 下边数据目录的项数,这个字段自Windows NT 发布以来 // 一直是16
    +78h IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
    // 数据目录表
    } IMAGE_OPTIONAL_HEADER32, *PIMAGE_OPTIONAL_HEADER32;
    FieldMeanings
    AddressOfEntryPoint PE装载器准备运行的PE文件的第一个指令的RVA。若您要改变整个执行的流程,可以将该值指定到新的RVA,这样新RVA处的指令首先被执行。
    ImageBase PE文件的优先装载地址。比如,如果该值是400000h,PE装载器将尝试把文件装到虚拟地址空间的400000h处。字眼"优先"表示若该地址区域已被其他模块占用,那PE装载器会选用其他空闲地址。
    SectionAlignment 内存中节对齐的粒度。例如,如果该值是4096 (1000h),那么每节的起始地址必须是4096的倍数。若第一节从401000h开始且大小是10个字节,则下一节必定从402000h开始,即使401000h和402000h之间还有很多空间没被使用。
    FileAlignment

    文件中节对齐的粒度。例如,如果该值是(200h),,那么每节的起始地址必须是512的倍数。若第一节从文件偏移量200h开始且大小是10个字节,则下一节必定位于偏移量400h: 即使偏移量512和1024之间还有很多空间没被使用/定义。

    MajorSubsystemVersion
    MinorSubsystemVersion
    win32子系统版本。若PE文件是专门为Win32设计的,该子系统版本必定是4.0否则对话框不会有3维立体感。
    SizeOfImage 内存中整个PE映像体的尺寸。它是所有头和节经过节对齐处理后的大小。
    SizeOfHeaders 所有头+节表的大小,也就等于文件尺寸减去文件中所有节的尺寸。可以以此值作为PE文件第一节的文件偏移量。
    Subsystem NT用来识别PE文件属于哪个子系统。 对于大多数Win32程序,只有两类值: Windows GUI 和 Windows CUI (控制台)。
    DataDirectory IMAGE_DATA_DIRECTORY 结构数组。每个结构给出一个重要数据结构的RVA,比如引入地址表等。
  • 相关阅读:
    设计模式-Note9-行为变化类
    设计模式-Note8-数据结构类
    设计模式-Note7-状态变化类
    设计模式-Note6-接口隔离类
    设计模式--Note5--对象性能类
    设计模式--Note4--对象创建类
    设计模式--Note3--单一职责类
    设计模式--Note2--组件协作类
    V$ACCESS 查询结果慢的解决方法
    openstack numa详解(命令使用篇)
  • 原文地址:https://www.cnblogs.com/wang-can/p/3280339.html
Copyright © 2011-2022 走看看