Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ WritePEHeader()

void System.Reflection.PortableExecutable.PEBuilder.WritePEHeader ( BlobBuilder builder,
PEDirectoriesBuilder directories,
ImmutableArray< SerializedSection > sections )
inlineprivateinherited

Definition at line 168 of file PEBuilder.cs.

169 {
170 builder.WriteUInt16((ushort)(Header.Is32Bit ? 267 : 523));
173 builder.WriteUInt32((uint)SumRawDataSizes(sections, SectionCharacteristics.ContainsCode));
174 builder.WriteUInt32((uint)SumRawDataSizes(sections, SectionCharacteristics.ContainsInitializedData));
175 builder.WriteUInt32((uint)SumRawDataSizes(sections, SectionCharacteristics.ContainsUninitializedData));
176 builder.WriteUInt32((uint)directories.AddressOfEntryPoint);
177 int num = IndexOfSection(sections, SectionCharacteristics.ContainsCode);
178 builder.WriteUInt32((num != -1) ? ((uint)sections[num].RelativeVirtualAddress) : 0u);
179 if (Header.Is32Bit)
180 {
181 int num2 = IndexOfSection(sections, SectionCharacteristics.ContainsInitializedData);
182 builder.WriteUInt32((num2 != -1) ? ((uint)sections[num2].RelativeVirtualAddress) : 0u);
183 builder.WriteUInt32((uint)Header.ImageBase);
184 }
185 else
186 {
187 builder.WriteUInt64(Header.ImageBase);
188 }
189 builder.WriteUInt32((uint)Header.SectionAlignment);
190 builder.WriteUInt32((uint)Header.FileAlignment);
193 builder.WriteUInt16(Header.MajorImageVersion);
194 builder.WriteUInt16(Header.MinorImageVersion);
197 builder.WriteUInt32(0u);
198 SerializedSection serializedSection = sections[sections.Length - 1];
199 builder.WriteUInt32((uint)BitArithmetic.Align(serializedSection.RelativeVirtualAddress + serializedSection.VirtualSize, Header.SectionAlignment));
201 _lazyChecksum = builder.ReserveBytes(4);
203 builder.WriteUInt16((ushort)Header.Subsystem);
204 builder.WriteUInt16((ushort)Header.DllCharacteristics);
205 if (Header.Is32Bit)
206 {
207 builder.WriteUInt32((uint)Header.SizeOfStackReserve);
208 builder.WriteUInt32((uint)Header.SizeOfStackCommit);
209 builder.WriteUInt32((uint)Header.SizeOfHeapReserve);
210 builder.WriteUInt32((uint)Header.SizeOfHeapCommit);
211 }
212 else
213 {
214 builder.WriteUInt64(Header.SizeOfStackReserve);
215 builder.WriteUInt64(Header.SizeOfStackCommit);
216 builder.WriteUInt64(Header.SizeOfHeapReserve);
217 builder.WriteUInt64(Header.SizeOfHeapCommit);
218 }
219 builder.WriteUInt32(0u);
220 builder.WriteUInt32(16u);
221 builder.WriteUInt32((uint)directories.ExportTable.RelativeVirtualAddress);
222 builder.WriteUInt32((uint)directories.ExportTable.Size);
223 builder.WriteUInt32((uint)directories.ImportTable.RelativeVirtualAddress);
224 builder.WriteUInt32((uint)directories.ImportTable.Size);
225 builder.WriteUInt32((uint)directories.ResourceTable.RelativeVirtualAddress);
226 builder.WriteUInt32((uint)directories.ResourceTable.Size);
227 builder.WriteUInt32((uint)directories.ExceptionTable.RelativeVirtualAddress);
228 builder.WriteUInt32((uint)directories.ExceptionTable.Size);
229 builder.WriteUInt32(0u);
230 builder.WriteUInt32(0u);
231 builder.WriteUInt32((uint)directories.BaseRelocationTable.RelativeVirtualAddress);
232 builder.WriteUInt32((uint)directories.BaseRelocationTable.Size);
233 builder.WriteUInt32((uint)directories.DebugTable.RelativeVirtualAddress);
234 builder.WriteUInt32((uint)directories.DebugTable.Size);
235 builder.WriteUInt32((uint)directories.CopyrightTable.RelativeVirtualAddress);
236 builder.WriteUInt32((uint)directories.CopyrightTable.Size);
237 builder.WriteUInt32((uint)directories.GlobalPointerTable.RelativeVirtualAddress);
238 builder.WriteUInt32((uint)directories.GlobalPointerTable.Size);
239 builder.WriteUInt32((uint)directories.ThreadLocalStorageTable.RelativeVirtualAddress);
240 builder.WriteUInt32((uint)directories.ThreadLocalStorageTable.Size);
241 builder.WriteUInt32((uint)directories.LoadConfigTable.RelativeVirtualAddress);
242 builder.WriteUInt32((uint)directories.LoadConfigTable.Size);
243 builder.WriteUInt32((uint)directories.BoundImportTable.RelativeVirtualAddress);
244 builder.WriteUInt32((uint)directories.BoundImportTable.Size);
245 builder.WriteUInt32((uint)directories.ImportAddressTable.RelativeVirtualAddress);
246 builder.WriteUInt32((uint)directories.ImportAddressTable.Size);
247 builder.WriteUInt32((uint)directories.DelayImportTable.RelativeVirtualAddress);
248 builder.WriteUInt32((uint)directories.DelayImportTable.Size);
249 builder.WriteUInt32((uint)directories.CorHeaderTable.RelativeVirtualAddress);
250 builder.WriteUInt32((uint)directories.CorHeaderTable.Size);
251 builder.WriteUInt64(0uL);
252 }
static uint Align(uint position, uint alignment)
static int SumRawDataSizes(ImmutableArray< SerializedSection > sections, SectionCharacteristics characteristics)
Definition PEBuilder.cs:306
static int IndexOfSection(ImmutableArray< SerializedSection > sections, SectionCharacteristics characteristics)
Definition PEBuilder.cs:294

References System.Reflection.PortableExecutable.PEBuilder._lazyChecksum, System.Reflection.Internal.BitArithmetic.Align(), System.Reflection.PortableExecutable.PEHeaderBuilder.ComputeSizeOfPEHeaders(), System.Reflection.PortableExecutable.PEHeaderBuilder.DllCharacteristics, System.Reflection.PortableExecutable.PEHeaderBuilder.FileAlignment, System.Reflection.PortableExecutable.PEBuilder.Header, System.Reflection.PortableExecutable.PEHeaderBuilder.ImageBase, System.Reflection.PortableExecutable.PEBuilder.IndexOfSection(), System.Reflection.PortableExecutable.PEHeaderBuilder.Is32Bit, System.Reflection.PortableExecutable.PEHeaderBuilder.MajorImageVersion, System.Reflection.PortableExecutable.PEHeaderBuilder.MajorLinkerVersion, System.Reflection.PortableExecutable.PEHeaderBuilder.MajorOperatingSystemVersion, System.Reflection.PortableExecutable.PEHeaderBuilder.MajorSubsystemVersion, System.Reflection.PortableExecutable.PEHeaderBuilder.MinorImageVersion, System.Reflection.PortableExecutable.PEHeaderBuilder.MinorLinkerVersion, System.Reflection.PortableExecutable.PEHeaderBuilder.MinorOperatingSystemVersion, System.Reflection.PortableExecutable.PEHeaderBuilder.MinorSubsystemVersion, System.Reflection.PortableExecutable.PEHeaderBuilder.SectionAlignment, System.Reflection.PortableExecutable.PEHeaderBuilder.SizeOfHeapCommit, System.Reflection.PortableExecutable.PEHeaderBuilder.SizeOfHeapReserve, System.Reflection.PortableExecutable.PEHeaderBuilder.SizeOfStackCommit, System.Reflection.PortableExecutable.PEHeaderBuilder.SizeOfStackReserve, System.Reflection.PortableExecutable.PEHeaderBuilder.Subsystem, System.Reflection.PortableExecutable.PEBuilder.SumRawDataSizes(), and System.Reflection.Metadata.BlobWriter.WriteUInt32().

Referenced by System.Reflection.PortableExecutable.PEBuilder.Serialize().