lin
2025-06-05 ed3dd9d3e7519a82bb871d5eedb24a2fa0c91f47
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
// 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
)