1// Copyright 2009 The Go Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style
3// license that can be found in the LICENSE file.
4
5package pe
6
7type FileHeader struct {
8	Machine              uint16
9	NumberOfSections     uint16
10	TimeDateStamp        uint32
11	PointerToSymbolTable uint32
12	NumberOfSymbols      uint32
13	SizeOfOptionalHeader uint16
14	Characteristics      uint16
15}
16
17type DataDirectory struct {
18	VirtualAddress uint32
19	Size           uint32
20}
21
22type OptionalHeader32 struct {
23	Magic                       uint16
24	MajorLinkerVersion          uint8
25	MinorLinkerVersion          uint8
26	SizeOfCode                  uint32
27	SizeOfInitializedData       uint32
28	SizeOfUninitializedData     uint32
29	AddressOfEntryPoint         uint32
30	BaseOfCode                  uint32
31	BaseOfData                  uint32
32	ImageBase                   uint32
33	SectionAlignment            uint32
34	FileAlignment               uint32
35	MajorOperatingSystemVersion uint16
36	MinorOperatingSystemVersion uint16
37	MajorImageVersion           uint16
38	MinorImageVersion           uint16
39	MajorSubsystemVersion       uint16
40	MinorSubsystemVersion       uint16
41	Win32VersionValue           uint32
42	SizeOfImage                 uint32
43	SizeOfHeaders               uint32
44	CheckSum                    uint32
45	Subsystem                   uint16
46	DllCharacteristics          uint16
47	SizeOfStackReserve          uint32
48	SizeOfStackCommit           uint32
49	SizeOfHeapReserve           uint32
50	SizeOfHeapCommit            uint32
51	LoaderFlags                 uint32
52	NumberOfRvaAndSizes         uint32
53	DataDirectory               [16]DataDirectory
54}
55
56type OptionalHeader64 struct {
57	Magic                       uint16
58	MajorLinkerVersion          uint8
59	MinorLinkerVersion          uint8
60	SizeOfCode                  uint32
61	SizeOfInitializedData       uint32
62	SizeOfUninitializedData     uint32
63	AddressOfEntryPoint         uint32
64	BaseOfCode                  uint32
65	ImageBase                   uint64
66	SectionAlignment            uint32
67	FileAlignment               uint32
68	MajorOperatingSystemVersion uint16
69	MinorOperatingSystemVersion uint16
70	MajorImageVersion           uint16
71	MinorImageVersion           uint16
72	MajorSubsystemVersion       uint16
73	MinorSubsystemVersion       uint16
74	Win32VersionValue           uint32
75	SizeOfImage                 uint32
76	SizeOfHeaders               uint32
77	CheckSum                    uint32
78	Subsystem                   uint16
79	DllCharacteristics          uint16
80	SizeOfStackReserve          uint64
81	SizeOfStackCommit           uint64
82	SizeOfHeapReserve           uint64
83	SizeOfHeapCommit            uint64
84	LoaderFlags                 uint32
85	NumberOfRvaAndSizes         uint32
86	DataDirectory               [16]DataDirectory
87}
88
89const (
90	IMAGE_FILE_MACHINE_UNKNOWN   = 0x0
91	IMAGE_FILE_MACHINE_AM33      = 0x1d3
92	IMAGE_FILE_MACHINE_AMD64     = 0x8664
93	IMAGE_FILE_MACHINE_ARM       = 0x1c0
94	IMAGE_FILE_MACHINE_ARMNT     = 0x1c4
95	IMAGE_FILE_MACHINE_ARM64     = 0xaa64
96	IMAGE_FILE_MACHINE_EBC       = 0xebc
97	IMAGE_FILE_MACHINE_I386      = 0x14c
98	IMAGE_FILE_MACHINE_IA64      = 0x200
99	IMAGE_FILE_MACHINE_M32R      = 0x9041
100	IMAGE_FILE_MACHINE_MIPS16    = 0x266
101	IMAGE_FILE_MACHINE_MIPSFPU   = 0x366
102	IMAGE_FILE_MACHINE_MIPSFPU16 = 0x466
103	IMAGE_FILE_MACHINE_POWERPC   = 0x1f0
104	IMAGE_FILE_MACHINE_POWERPCFP = 0x1f1
105	IMAGE_FILE_MACHINE_R4000     = 0x166
106	IMAGE_FILE_MACHINE_SH3       = 0x1a2
107	IMAGE_FILE_MACHINE_SH3DSP    = 0x1a3
108	IMAGE_FILE_MACHINE_SH4       = 0x1a6
109	IMAGE_FILE_MACHINE_SH5       = 0x1a8
110	IMAGE_FILE_MACHINE_THUMB     = 0x1c2
111	IMAGE_FILE_MACHINE_WCEMIPSV2 = 0x169
112)
113
114// IMAGE_DIRECTORY_ENTRY constants
115const (
116	IMAGE_DIRECTORY_ENTRY_EXPORT         = 0
117	IMAGE_DIRECTORY_ENTRY_IMPORT         = 1
118	IMAGE_DIRECTORY_ENTRY_RESOURCE       = 2
119	IMAGE_DIRECTORY_ENTRY_EXCEPTION      = 3
120	IMAGE_DIRECTORY_ENTRY_SECURITY       = 4
121	IMAGE_DIRECTORY_ENTRY_BASERELOC      = 5
122	IMAGE_DIRECTORY_ENTRY_DEBUG          = 6
123	IMAGE_DIRECTORY_ENTRY_ARCHITECTURE   = 7
124	IMAGE_DIRECTORY_ENTRY_GLOBALPTR      = 8
125	IMAGE_DIRECTORY_ENTRY_TLS            = 9
126	IMAGE_DIRECTORY_ENTRY_LOAD_CONFIG    = 10
127	IMAGE_DIRECTORY_ENTRY_BOUND_IMPORT   = 11
128	IMAGE_DIRECTORY_ENTRY_IAT            = 12
129	IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT   = 13
130	IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR = 14
131)
132
133// Values of IMAGE_FILE_HEADER.Characteristics. These can be combined together.
134const (
135	IMAGE_FILE_RELOCS_STRIPPED         = 0x0001
136	IMAGE_FILE_EXECUTABLE_IMAGE        = 0x0002
137	IMAGE_FILE_LINE_NUMS_STRIPPED      = 0x0004
138	IMAGE_FILE_LOCAL_SYMS_STRIPPED     = 0x0008
139	IMAGE_FILE_AGGRESIVE_WS_TRIM       = 0x0010
140	IMAGE_FILE_LARGE_ADDRESS_AWARE     = 0x0020
141	IMAGE_FILE_BYTES_REVERSED_LO       = 0x0080
142	IMAGE_FILE_32BIT_MACHINE           = 0x0100
143	IMAGE_FILE_DEBUG_STRIPPED          = 0x0200
144	IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP = 0x0400
145	IMAGE_FILE_NET_RUN_FROM_SWAP       = 0x0800
146	IMAGE_FILE_SYSTEM                  = 0x1000
147	IMAGE_FILE_DLL                     = 0x2000
148	IMAGE_FILE_UP_SYSTEM_ONLY          = 0x4000
149	IMAGE_FILE_BYTES_REVERSED_HI       = 0x8000
150)
151
152// OptionalHeader64.Subsystem and OptionalHeader32.Subsystem values.
153const (
154	IMAGE_SUBSYSTEM_UNKNOWN                  = 0
155	IMAGE_SUBSYSTEM_NATIVE                   = 1
156	IMAGE_SUBSYSTEM_WINDOWS_GUI              = 2
157	IMAGE_SUBSYSTEM_WINDOWS_CUI              = 3
158	IMAGE_SUBSYSTEM_OS2_CUI                  = 5
159	IMAGE_SUBSYSTEM_POSIX_CUI                = 7
160	IMAGE_SUBSYSTEM_NATIVE_WINDOWS           = 8
161	IMAGE_SUBSYSTEM_WINDOWS_CE_GUI           = 9
162	IMAGE_SUBSYSTEM_EFI_APPLICATION          = 10
163	IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER  = 11
164	IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER       = 12
165	IMAGE_SUBSYSTEM_EFI_ROM                  = 13
166	IMAGE_SUBSYSTEM_XBOX                     = 14
167	IMAGE_SUBSYSTEM_WINDOWS_BOOT_APPLICATION = 16
168)
169
170// OptionalHeader64.DllCharacteristics and OptionalHeader32.DllCharacteristics
171// values. These can be combined together.
172const (
173	IMAGE_DLLCHARACTERISTICS_HIGH_ENTROPY_VA       = 0x0020
174	IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE          = 0x0040
175	IMAGE_DLLCHARACTERISTICS_FORCE_INTEGRITY       = 0x0080
176	IMAGE_DLLCHARACTERISTICS_NX_COMPAT             = 0x0100
177	IMAGE_DLLCHARACTERISTICS_NO_ISOLATION          = 0x0200
178	IMAGE_DLLCHARACTERISTICS_NO_SEH                = 0x0400
179	IMAGE_DLLCHARACTERISTICS_NO_BIND               = 0x0800
180	IMAGE_DLLCHARACTERISTICS_APPCONTAINER          = 0x1000
181	IMAGE_DLLCHARACTERISTICS_WDM_DRIVER            = 0x2000
182	IMAGE_DLLCHARACTERISTICS_GUARD_CF              = 0x4000
183	IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE = 0x8000
184)
185