|  | // Copyright 2009 The Go Authors. All rights reserved. | 
|  | // Use of this source code is governed by a BSD-style | 
|  | // license that can be found in the LICENSE file. | 
|  |  | 
|  | package pe | 
|  |  | 
|  | type FileHeader struct { | 
|  | Machine              uint16 | 
|  | NumberOfSections     uint16 | 
|  | TimeDateStamp        uint32 | 
|  | PointerToSymbolTable uint32 | 
|  | NumberOfSymbols      uint32 | 
|  | SizeOfOptionalHeader uint16 | 
|  | Characteristics      uint16 | 
|  | } | 
|  |  | 
|  | type DataDirectory struct { | 
|  | VirtualAddress uint32 | 
|  | Size           uint32 | 
|  | } | 
|  |  | 
|  | type OptionalHeader32 struct { | 
|  | Magic                       uint16 | 
|  | MajorLinkerVersion          uint8 | 
|  | MinorLinkerVersion          uint8 | 
|  | SizeOfCode                  uint32 | 
|  | SizeOfInitializedData       uint32 | 
|  | SizeOfUninitializedData     uint32 | 
|  | AddressOfEntryPoint         uint32 | 
|  | BaseOfCode                  uint32 | 
|  | BaseOfData                  uint32 | 
|  | ImageBase                   uint32 | 
|  | SectionAlignment            uint32 | 
|  | FileAlignment               uint32 | 
|  | MajorOperatingSystemVersion uint16 | 
|  | MinorOperatingSystemVersion uint16 | 
|  | MajorImageVersion           uint16 | 
|  | MinorImageVersion           uint16 | 
|  | MajorSubsystemVersion       uint16 | 
|  | MinorSubsystemVersion       uint16 | 
|  | Win32VersionValue           uint32 | 
|  | SizeOfImage                 uint32 | 
|  | SizeOfHeaders               uint32 | 
|  | CheckSum                    uint32 | 
|  | Subsystem                   uint16 | 
|  | DllCharacteristics          uint16 | 
|  | SizeOfStackReserve          uint32 | 
|  | SizeOfStackCommit           uint32 | 
|  | SizeOfHeapReserve           uint32 | 
|  | SizeOfHeapCommit            uint32 | 
|  | LoaderFlags                 uint32 | 
|  | NumberOfRvaAndSizes         uint32 | 
|  | DataDirectory               [16]DataDirectory | 
|  | } | 
|  |  | 
|  | type OptionalHeader64 struct { | 
|  | Magic                       uint16 | 
|  | MajorLinkerVersion          uint8 | 
|  | MinorLinkerVersion          uint8 | 
|  | SizeOfCode                  uint32 | 
|  | SizeOfInitializedData       uint32 | 
|  | SizeOfUninitializedData     uint32 | 
|  | AddressOfEntryPoint         uint32 | 
|  | BaseOfCode                  uint32 | 
|  | ImageBase                   uint64 | 
|  | SectionAlignment            uint32 | 
|  | FileAlignment               uint32 | 
|  | MajorOperatingSystemVersion uint16 | 
|  | MinorOperatingSystemVersion uint16 | 
|  | MajorImageVersion           uint16 | 
|  | MinorImageVersion           uint16 | 
|  | MajorSubsystemVersion       uint16 | 
|  | MinorSubsystemVersion       uint16 | 
|  | Win32VersionValue           uint32 | 
|  | SizeOfImage                 uint32 | 
|  | SizeOfHeaders               uint32 | 
|  | CheckSum                    uint32 | 
|  | Subsystem                   uint16 | 
|  | DllCharacteristics          uint16 | 
|  | SizeOfStackReserve          uint64 | 
|  | SizeOfStackCommit           uint64 | 
|  | SizeOfHeapReserve           uint64 | 
|  | SizeOfHeapCommit            uint64 | 
|  | LoaderFlags                 uint32 | 
|  | NumberOfRvaAndSizes         uint32 | 
|  | DataDirectory               [16]DataDirectory | 
|  | } | 
|  |  | 
|  | const ( | 
|  | IMAGE_FILE_MACHINE_UNKNOWN   = 0x0 | 
|  | IMAGE_FILE_MACHINE_AM33      = 0x1d3 | 
|  | IMAGE_FILE_MACHINE_AMD64     = 0x8664 | 
|  | IMAGE_FILE_MACHINE_ARM       = 0x1c0 | 
|  | IMAGE_FILE_MACHINE_ARMNT     = 0x1c4 | 
|  | IMAGE_FILE_MACHINE_ARM64     = 0xaa64 | 
|  | IMAGE_FILE_MACHINE_EBC       = 0xebc | 
|  | IMAGE_FILE_MACHINE_I386      = 0x14c | 
|  | IMAGE_FILE_MACHINE_IA64      = 0x200 | 
|  | IMAGE_FILE_MACHINE_M32R      = 0x9041 | 
|  | IMAGE_FILE_MACHINE_MIPS16    = 0x266 | 
|  | IMAGE_FILE_MACHINE_MIPSFPU   = 0x366 | 
|  | IMAGE_FILE_MACHINE_MIPSFPU16 = 0x466 | 
|  | IMAGE_FILE_MACHINE_POWERPC   = 0x1f0 | 
|  | IMAGE_FILE_MACHINE_POWERPCFP = 0x1f1 | 
|  | IMAGE_FILE_MACHINE_R4000     = 0x166 | 
|  | IMAGE_FILE_MACHINE_SH3       = 0x1a2 | 
|  | IMAGE_FILE_MACHINE_SH3DSP    = 0x1a3 | 
|  | IMAGE_FILE_MACHINE_SH4       = 0x1a6 | 
|  | IMAGE_FILE_MACHINE_SH5       = 0x1a8 | 
|  | IMAGE_FILE_MACHINE_THUMB     = 0x1c2 | 
|  | IMAGE_FILE_MACHINE_WCEMIPSV2 = 0x169 | 
|  | ) | 
|  |  | 
|  | // IMAGE_DIRECTORY_ENTRY constants | 
|  | const ( | 
|  | IMAGE_DIRECTORY_ENTRY_EXPORT         = 0 | 
|  | IMAGE_DIRECTORY_ENTRY_IMPORT         = 1 | 
|  | IMAGE_DIRECTORY_ENTRY_RESOURCE       = 2 | 
|  | IMAGE_DIRECTORY_ENTRY_EXCEPTION      = 3 | 
|  | IMAGE_DIRECTORY_ENTRY_SECURITY       = 4 | 
|  | IMAGE_DIRECTORY_ENTRY_BASERELOC      = 5 | 
|  | IMAGE_DIRECTORY_ENTRY_DEBUG          = 6 | 
|  | IMAGE_DIRECTORY_ENTRY_ARCHITECTURE   = 7 | 
|  | IMAGE_DIRECTORY_ENTRY_GLOBALPTR      = 8 | 
|  | IMAGE_DIRECTORY_ENTRY_TLS            = 9 | 
|  | IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG    = 10 | 
|  | IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT   = 11 | 
|  | IMAGE_DIRECTORY_ENTRY_IAT            = 12 | 
|  | IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT   = 13 | 
|  | IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14 | 
|  | ) | 
|  |  | 
|  | // Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together. | 
|  | const ( | 
|  | IMAGE_FILE_RELOCS_STRIPPED         = 0x0001 | 
|  | IMAGE_FILE_EXECUTABLE_IMAGE        = 0x0002 | 
|  | IMAGE_FILE_LINE_NUMS_STRIPPED      = 0x0004 | 
|  | IMAGE_FILE_LOCAL_SYMS_STRIPPED     = 0x0008 | 
|  | IMAGE_FILE_AGGRESIVE_WS_TRIM       = 0x0010 | 
|  | IMAGE_FILE_LARGE_ADDRESS_AWARE     = 0x0020 | 
|  | IMAGE_FILE_BYTES_REVERSED_LO       = 0x0080 | 
|  | IMAGE_FILE_32BIT_MACHINE           = 0x0100 | 
|  | IMAGE_FILE_DEBUG_STRIPPED          = 0x0200 | 
|  | IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = 0x0400 | 
|  | IMAGE_FILE_NET_RUN_FROM_SWAP       = 0x0800 | 
|  | IMAGE_FILE_SYSTEM                  = 0x1000 | 
|  | IMAGE_FILE_DLL                     = 0x2000 | 
|  | IMAGE_FILE_UP_SYSTEM_ONLY          = 0x4000 | 
|  | IMAGE_FILE_BYTES_REVERSED_HI       = 0x8000 | 
|  | ) | 
|  |  | 
|  | // OptionalHeader64.Subsystem and OptionalHeader32.Subsystem values. | 
|  | const ( | 
|  | IMAGE_SUBSYSTEM_UNKNOWN                  = 0 | 
|  | IMAGE_SUBSYSTEM_NATIVE                   = 1 | 
|  | IMAGE_SUBSYSTEM_WINDOWS_GUI              = 2 | 
|  | IMAGE_SUBSYSTEM_WINDOWS_CUI              = 3 | 
|  | IMAGE_SUBSYSTEM_OS2_CUI                  = 5 | 
|  | IMAGE_SUBSYSTEM_POSIX_CUI                = 7 | 
|  | IMAGE_SUBSYSTEM_NATIVE_WINDOWS           = 8 | 
|  | IMAGE_SUBSYSTEM_WINDOWS_CE_GUI           = 9 | 
|  | IMAGE_SUBSYSTEM_EFI_APPLICATION          = 10 | 
|  | IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER  = 11 | 
|  | IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER       = 12 | 
|  | IMAGE_SUBSYSTEM_EFI_ROM                  = 13 | 
|  | IMAGE_SUBSYSTEM_XBOX                     = 14 | 
|  | IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION = 16 | 
|  | ) | 
|  |  | 
|  | // OptionalHeader64.DllCharacteristics and OptionalHeader32.DllCharacteristics | 
|  | // values. These can be combined together. | 
|  | const ( | 
|  | IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA       = 0x0020 | 
|  | IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE          = 0x0040 | 
|  | IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY       = 0x0080 | 
|  | IMAGE_DLLCHARACTERISTICS_NX_COMPAT             = 0x0100 | 
|  | IMAGE_DLLCHARACTERISTICS_NO_ISOLATION          = 0x0200 | 
|  | IMAGE_DLLCHARACTERISTICS_NO_SEH                = 0x0400 | 
|  | IMAGE_DLLCHARACTERISTICS_NO_BIND               = 0x0800 | 
|  | IMAGE_DLLCHARACTERISTICS_APPCONTAINER          = 0x1000 | 
|  | IMAGE_DLLCHARACTERISTICS_WDM_DRIVER            = 0x2000 | 
|  | IMAGE_DLLCHARACTERISTICS_GUARD_CF              = 0x4000 | 
|  | IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = 0x8000 | 
|  | ) |