// dnlib: See LICENSE.txt for more info using System; using dnlib.IO; using dnlib.PE; namespace dnlib.DotNet.MD { /// /// Represents the IMAGE_COR20_HEADER structure /// public sealed class ImageCor20Header : FileSection { readonly uint cb; readonly ushort majorRuntimeVersion; readonly ushort minorRuntimeVersion; readonly ImageDataDirectory metadata; readonly ComImageFlags flags; readonly uint entryPointToken_or_RVA; readonly ImageDataDirectory resources; readonly ImageDataDirectory strongNameSignature; readonly ImageDataDirectory codeManagerTable; readonly ImageDataDirectory vtableFixups; readonly ImageDataDirectory exportAddressTableJumps; readonly ImageDataDirectory managedNativeHeader; /// /// Returns true if it has a native header /// public bool HasNativeHeader => (flags & ComImageFlags.ILLibrary) != 0; /// /// Returns the IMAGE_COR20_HEADER.cb field /// public uint CB => cb; /// /// Returns the IMAGE_COR20_HEADER.MajorRuntimeVersion field /// public ushort MajorRuntimeVersion => majorRuntimeVersion; /// /// Returns the IMAGE_COR20_HEADER.MinorRuntimeVersion field /// public ushort MinorRuntimeVersion => minorRuntimeVersion; /// /// Returns the IMAGE_COR20_HEADER.Metadata field /// public ImageDataDirectory Metadata => metadata; /// /// Returns the IMAGE_COR20_HEADER.Flags field /// public ComImageFlags Flags => flags; /// /// Returns the IMAGE_COR20_HEADER.EntryPointToken/EntryPointTokenRVA field /// public uint EntryPointToken_or_RVA => entryPointToken_or_RVA; /// /// Returns the IMAGE_COR20_HEADER.Resources field /// public ImageDataDirectory Resources => resources; /// /// Returns the IMAGE_COR20_HEADER.StrongNameSignature field /// public ImageDataDirectory StrongNameSignature => strongNameSignature; /// /// Returns the IMAGE_COR20_HEADER.CodeManagerTable field /// public ImageDataDirectory CodeManagerTable => codeManagerTable; /// /// Returns the IMAGE_COR20_HEADER.VTableFixups field /// public ImageDataDirectory VTableFixups => vtableFixups; /// /// Returns the IMAGE_COR20_HEADER.ExportAddressTableJumps field /// public ImageDataDirectory ExportAddressTableJumps => exportAddressTableJumps; /// /// Returns the IMAGE_COR20_HEADER.ManagedNativeHeader field /// public ImageDataDirectory ManagedNativeHeader => managedNativeHeader; /// /// Constructor /// /// PE file reader pointing to the start of this section /// Verify section /// Thrown if verification fails public ImageCor20Header(ref DataReader reader, bool verify) { SetStartOffset(ref reader); cb = reader.ReadUInt32(); if (verify && cb < 0x48) throw new BadImageFormatException("Invalid IMAGE_COR20_HEADER.cb value"); majorRuntimeVersion = reader.ReadUInt16(); minorRuntimeVersion = reader.ReadUInt16(); metadata = new ImageDataDirectory(ref reader, verify); flags = (ComImageFlags)reader.ReadUInt32(); entryPointToken_or_RVA = reader.ReadUInt32(); resources = new ImageDataDirectory(ref reader, verify); strongNameSignature = new ImageDataDirectory(ref reader, verify); codeManagerTable = new ImageDataDirectory(ref reader, verify); vtableFixups = new ImageDataDirectory(ref reader, verify); exportAddressTableJumps = new ImageDataDirectory(ref reader, verify); managedNativeHeader = new ImageDataDirectory(ref reader, verify); SetEndoffset(ref reader); } } }