184 lines
6.4 KiB
Go
184 lines
6.4 KiB
Go
// 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
|
|
)
|