// 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);
}
}
}