连载19:可选头字段解释(中)
2020-03-09 本文已影响0人
码农UP2U
上篇文章介绍了可选头的部分字段,本篇接着介绍一部分字段的。
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” 关注我的公众号吧!!!