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_EBC       = 0xebc
95	IMAGE_FILE_MACHINE_I386      = 0x14c
96	IMAGE_FILE_MACHINE_IA64      = 0x200
97	IMAGE_FILE_MACHINE_M32R      = 0x9041
98	IMAGE_FILE_MACHINE_MIPS16    = 0x266
99	IMAGE_FILE_MACHINE_MIPSFPU   = 0x366
100	IMAGE_FILE_MACHINE_MIPSFPU16 = 0x466
101	IMAGE_FILE_MACHINE_POWERPC   = 0x1f0
102	IMAGE_FILE_MACHINE_POWERPCFP = 0x1f1
103	IMAGE_FILE_MACHINE_R4000     = 0x166
104	IMAGE_FILE_MACHINE_SH3       = 0x1a2
105	IMAGE_FILE_MACHINE_SH3DSP    = 0x1a3
106	IMAGE_FILE_MACHINE_SH4       = 0x1a6
107	IMAGE_FILE_MACHINE_SH5       = 0x1a8
108	IMAGE_FILE_MACHINE_THUMB     = 0x1c2
109	IMAGE_FILE_MACHINE_WCEMIPSV2 = 0x169
110)
111