/* * Copyright (c) 2002 Sergey Chaban */ using System; using System.IO; using System.Runtime.InteropServices; namespace Mono.PEToolkit { /// /// IMAGE_FILE_HEADER /// [StructLayoutAttribute(LayoutKind.Sequential)] public struct COFFHeader { internal MachineId machine; internal short sections; internal uint tdStampRaw; internal uint symTabPtr; internal uint numSymbols; internal short optHeaderSize; internal Characteristics characteristics; /// /// Machine identifier. /// public MachineId Machine { get { return machine; } set { machine = value; } } /// /// public short NumberOfSections { get { return sections; } set { sections = value; } } /// /// public uint TimeDateStamp { get { return tdStampRaw; } set { tdStampRaw = value; } } /// /// public DateTime TimeStamp { get { return (new DateTime(1970, 1, 1) + TimeSpan.FromSeconds(tdStampRaw)).ToLocalTime(); } } /// /// public uint PointerToSymbolTable { get { return symTabPtr; } set { symTabPtr = value; } } /// /// public uint NumberOfSymbols { get { return numSymbols; } set { numSymbols = value; } } /// /// public short SizeOfOptionalHeader { get { return optHeaderSize; } set { optHeaderSize = value; } } /// /// public Characteristics Characteristics { get { return characteristics; } set { characteristics = value; } } /// /// unsafe public void Read(BinaryReader reader) { fixed (void* pThis = &this) { PEUtils.ReadStruct(reader, pThis, sizeof (COFFHeader), typeof (COFFHeader)); } } /// /// /// public void Dump(TextWriter writer) { writer.WriteLine( "Machine ID : {0}" + Environment.NewLine + "Sections : {1}" + Environment.NewLine + "timestamp : {2}" + Environment.NewLine + "Characteristics : {3}" + Environment.NewLine, machine, sections, TimeStamp + " (" + tdStampRaw.ToString("X") + ")", characteristics + " (0x" + characteristics.ToString("X") + ")" ); } /// /// /// public override string ToString() { StringWriter sw = new StringWriter(); Dump(sw); return sw.ToString(); } } }