美文网首页
连载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:可选头字段解释(中)

    上篇文章介绍了可选头的部分字段,本篇接着介绍一部分字段的。 0x0001 NT additional fields...

  • 连载20:可选头字段解释(下)

    前两篇介绍了关于可选头的部分字段,本篇接着介绍可选头的剩余部分字段。 可选头剩余的字段介绍 可选头剩余的字段还有两...

  • MMsegmentation教程-Config参数解释

    Config命名格式: 以下为每一项的具体解释: {xxx}是必填字段,[yyy]是可选字段。 {model}:型...

  • 连载23:代码输出可选头

    这是可选头的最后一篇文章了,用代码将可选头进行一个输出,其实整个输出和前面也是没有什么差别的,逐个字段的输出即可。...

  • HTTP

    1.uri 2.request报文 请求行: 请求方法 请求资源 协议版本 请求头:一些可选的头部字段 空格 请求...

  • 字段可选性设计

    在阅读 Kubernetes API 或 其他项目的 API时,这些 API 中有些字段包含了 // +optio...

  • 国外优秀教程精译 | Swift 可选值详解(下)

    如果看完 Swift 可选值详解(上)后,你对可选值还是有些迷惑,甚至一头雾水,那么我们来换一种方式来解释。看下面...

  • 连载25:节表字段的解释

    节表的数据结构在上一篇文章中已经给出了,这篇将会对其进行解释。而且,我在前面的文章中也提到过,了解完节表以后,就可...

  • 连载22:在 C32Asm 中查看可选头

    前几篇文章介绍了可选头 IMAGE_OPTIONAL_HEADER 结构体,今天来通过 C32Asm 大体的观察一...

  • Model field reference - Field op

    Field options (字段选项。以下参数可用于所有字段类型。所有都是可选的。) Field.null 如果...

网友评论

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

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