Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
PEHeader.cs
Go to the documentation of this file.
2
3public sealed class PEHeader
4{
5 internal const int OffsetOfChecksum = 64;
6
7 public PEMagic Magic { get; }
8
9 public byte MajorLinkerVersion { get; }
10
11 public byte MinorLinkerVersion { get; }
12
13 public int SizeOfCode { get; }
14
15 public int SizeOfInitializedData { get; }
16
17 public int SizeOfUninitializedData { get; }
18
19 public int AddressOfEntryPoint { get; }
20
21 public int BaseOfCode { get; }
22
23 public int BaseOfData { get; }
24
25 public ulong ImageBase { get; }
26
27 public int SectionAlignment { get; }
28
29 public int FileAlignment { get; }
30
31 public ushort MajorOperatingSystemVersion { get; }
32
33 public ushort MinorOperatingSystemVersion { get; }
34
35 public ushort MajorImageVersion { get; }
36
37 public ushort MinorImageVersion { get; }
38
39 public ushort MajorSubsystemVersion { get; }
40
41 public ushort MinorSubsystemVersion { get; }
42
43 public int SizeOfImage { get; }
44
45 public int SizeOfHeaders { get; }
46
47 public uint CheckSum { get; }
48
49 public Subsystem Subsystem { get; }
50
52
53 public ulong SizeOfStackReserve { get; }
54
55 public ulong SizeOfStackCommit { get; }
56
57 public ulong SizeOfHeapReserve { get; }
58
59 public ulong SizeOfHeapCommit { get; }
60
61 public int NumberOfRvaAndSizes { get; }
62
64
66
68
70
72
74
76
78
80
82
84
86
88
90
92
93 internal static int Size(bool is32Bit)
94 {
95 return 72 + 4 * (is32Bit ? 4 : 8) + 4 + 4 + 128;
96 }
97
98 internal PEHeader(ref PEBinaryReader reader)
99 {
100 PEMagic pEMagic = (PEMagic)reader.ReadUInt16();
101 if (pEMagic != PEMagic.PE32 && pEMagic != PEMagic.PE32Plus)
102 {
104 }
105 Magic = pEMagic;
106 MajorLinkerVersion = reader.ReadByte();
107 MinorLinkerVersion = reader.ReadByte();
108 SizeOfCode = reader.ReadInt32();
109 SizeOfInitializedData = reader.ReadInt32();
110 SizeOfUninitializedData = reader.ReadInt32();
111 AddressOfEntryPoint = reader.ReadInt32();
112 BaseOfCode = reader.ReadInt32();
113 if (pEMagic == PEMagic.PE32Plus)
114 {
115 BaseOfData = 0;
116 }
117 else
118 {
119 BaseOfData = reader.ReadInt32();
120 }
121 if (pEMagic == PEMagic.PE32Plus)
122 {
123 ImageBase = reader.ReadUInt64();
124 }
125 else
126 {
127 ImageBase = reader.ReadUInt32();
128 }
129 SectionAlignment = reader.ReadInt32();
130 FileAlignment = reader.ReadInt32();
131 MajorOperatingSystemVersion = reader.ReadUInt16();
132 MinorOperatingSystemVersion = reader.ReadUInt16();
133 MajorImageVersion = reader.ReadUInt16();
134 MinorImageVersion = reader.ReadUInt16();
135 MajorSubsystemVersion = reader.ReadUInt16();
136 MinorSubsystemVersion = reader.ReadUInt16();
137 reader.ReadUInt32();
138 SizeOfImage = reader.ReadInt32();
139 SizeOfHeaders = reader.ReadInt32();
140 CheckSum = reader.ReadUInt32();
141 Subsystem = (Subsystem)reader.ReadUInt16();
142 DllCharacteristics = (DllCharacteristics)reader.ReadUInt16();
143 if (pEMagic == PEMagic.PE32Plus)
144 {
145 SizeOfStackReserve = reader.ReadUInt64();
146 SizeOfStackCommit = reader.ReadUInt64();
147 SizeOfHeapReserve = reader.ReadUInt64();
148 SizeOfHeapCommit = reader.ReadUInt64();
149 }
150 else
151 {
152 SizeOfStackReserve = reader.ReadUInt32();
153 SizeOfStackCommit = reader.ReadUInt32();
154 SizeOfHeapReserve = reader.ReadUInt32();
155 SizeOfHeapCommit = reader.ReadUInt32();
156 }
157 reader.ReadUInt32();
158 NumberOfRvaAndSizes = reader.ReadInt32();
159 ExportTableDirectory = new DirectoryEntry(ref reader);
160 ImportTableDirectory = new DirectoryEntry(ref reader);
161 ResourceTableDirectory = new DirectoryEntry(ref reader);
162 ExceptionTableDirectory = new DirectoryEntry(ref reader);
165 DebugTableDirectory = new DirectoryEntry(ref reader);
166 CopyrightTableDirectory = new DirectoryEntry(ref reader);
173 CorHeaderTableDirectory = new DirectoryEntry(ref reader);
174 new DirectoryEntry(ref reader);
175 }
176}
PEHeader(ref PEBinaryReader reader)
Definition PEHeader.cs:98
static string UnknownPEMagicValue
Definition SR.cs:56
Definition SR.cs:7