美文网首页
连载19:可选头字段解释(中)

连载19:可选头字段解释(中)

作者: 码农UP2U | 来源:发表于2020-03-09 14:06 被阅读0次

    上篇文章介绍了可选头的部分字段,本篇接着介绍一部分字段的。

    0x0001 NT additional fields 解释

    本篇介绍的 NT additional fields 字段中没有介绍 IMAGE_OPTINAL_HEADER 的最后一个字段,留着下篇再接着介绍。虽然它也在 IMAGE_OPTIONAL_HEADER 的 NT additional fields 中,但是它是一个数组,所以这部分单独介绍一下。

    本篇介绍的字段如下:

    • ImageBase:建议装载地址,对于 EXE 文件而言,建议装载地址一般就是实际地址,对于 DLL 等文件来说,因为重定位的原因,建议装载并不是实际的装载地址
    • SectionAlignment:节区在内存中的对齐粒度
    • FileAlignment:节区在文件中的对齐粒度
    • MajorOperatingSystemVersion:要求最低操作系统的主版本号
    • MinorOperatingSystemVersion:要求最低操作系统的次版本号
    • MajorImageVersion:可执行文件的主版本号
    • MinorImageVersion:可执行文件的次版本号
    • MajorSubsystemVersion:要求子系统的主版本号
    • MinorSubsystemVersion:要求子系统的次版本号
    • Win32VersionValue:暂时保留未使用,必须为 0
    • SizeOfImage:PE 文件映像的大小,也就是 PE 文件被装载到内存中以后的大小
    • SizeOfHeaders:PE 文件头的大小
    • CheckSum:校验和
    • Subsystem:可执行文件的子系统类型
      // Subsystem Values
    #define IMAGE_SUBSYSTEM_UNKNOWN              0   // Unknown subsystem.
    #define IMAGE_SUBSYSTEM_NATIVE               1   // Image doesn't require a subsystem.
    #define IMAGE_SUBSYSTEM_WINDOWS_GUI          2   // Image runs in the Windows GUI subsystem.
    #define IMAGE_SUBSYSTEM_WINDOWS_CUI          3   // Image runs in the Windows character subsystem.
    #define IMAGE_SUBSYSTEM_OS2_CUI              5   // image runs in the OS/2 character subsystem.
    #define IMAGE_SUBSYSTEM_POSIX_CUI            7   // image runs in the Posix character subsystem.
    #define IMAGE_SUBSYSTEM_NATIVE_WINDOWS       8   // image is a native Win9x driver.
    #define IMAGE_SUBSYSTEM_WINDOWS_CE_GUI       9   // Image runs in the Windows CE subsystem.
    #define IMAGE_SUBSYSTEM_EFI_APPLICATION      10  //
    #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER  11   //
    #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER   12  //
    #define IMAGE_SUBSYSTEM_EFI_ROM              13
    #define IMAGE_SUBSYSTEM_XBOX                 14
    #define IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION 16
    

    其中一般床用的是 IMAGE_SUBSYSTEM_NATIVE、IMAGE_SUBSYSTEM_WINDOWS_GUI、IMAGE_SUBSYSTEM_WINDOWS_CUI,它们分别表示不需要子系统(一般是驱动)、图形子系统和控制台子系统

    • DllCharacteristics:指定 DLL 文件的属性
    // DllCharacteristics Entries
    
    //      IMAGE_LIBRARY_PROCESS_INIT            0x0001     // Reserved.
    //      IMAGE_LIBRARY_PROCESS_TERM            0x0002     // Reserved.
    //      IMAGE_LIBRARY_THREAD_INIT             0x0004     // Reserved.
    //      IMAGE_LIBRARY_THREAD_TERM             0x0008     // Reserved.
    #define IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA    0x0020  // Image can handle a high entropy 64-bit virtual address space.
    #define IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE 0x0040     // DLL can move.
    #define IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY    0x0080     // Code Integrity Image
    #define IMAGE_DLLCHARACTERISTICS_NX_COMPAT    0x0100     // Image is NX compatible
    #define IMAGE_DLLCHARACTERISTICS_NO_ISOLATION 0x0200     // Image understands isolation and doesn't want it
    #define IMAGE_DLLCHARACTERISTICS_NO_SEH       0x0400     // Image does not use SEH.  No SE handler may reside in this image
    #define IMAGE_DLLCHARACTERISTICS_NO_BIND      0x0800     // Do not bind this image.
    #define IMAGE_DLLCHARACTERISTICS_APPCONTAINER 0x1000     // Image should execute in an AppContainer
    #define IMAGE_DLLCHARACTERISTICS_WDM_DRIVER   0x2000     // Driver uses WDM model
    #define IMAGE_DLLCHARACTERISTICS_GUARD_CF     0x4000     // Image supports Control Flow Guard.
    #define IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE     0x8000
    
    • SizeOfStackReserve:为线程保留的栈大小,以字节为单位
    • SizeOfStackCommit:为线程已提交的栈大小,以字节为单位
    • SizeOfHeapReserve:为线程保留的堆大小
    • SizeOfHeapCommit:为线程提交的堆大小
    • LoaderFlags:保留字段,必须为 0


    微信中搜索 “码农UP2U” 关注我的公众号吧!!!

    相关文章

      网友评论

          本文标题:连载19:可选头字段解释(中)

          本文链接:https://www.haomeiwen.com/subject/fccnfhtx.html