2 * Copyright (c) 2002 Sergey Chaban <serge@wildwestsoftware.com>
\r
7 using System.Runtime.InteropServices;
\r
9 namespace Mono.PEToolkit {
\r
11 public class COFFHeader {
\r
13 private MachineId machine;
\r
14 private short sections;
\r
15 private uint tdStampRaw;
\r
16 private uint symTabPtr;
\r
17 private uint numSymbols;
\r
18 private short optHeaderSize;
\r
19 private Characteristics characteristics;
\r
21 public MachineId Machine {
\r
22 get { return machine; }
\r
23 set { machine = value; }
\r
26 public short NumberOfSections {
\r
27 get { return sections; }
\r
28 set { sections = value; }
\r
31 public uint TimeDateStamp {
\r
32 get { return tdStampRaw; }
\r
33 set { tdStampRaw = value; }
\r
36 public DateTime TimeStamp {
\r
38 return (new DateTime(1970, 1, 1) +
\r
39 TimeSpan.FromSeconds(tdStampRaw)).ToLocalTime();
\r
43 public uint PointerToSymbolTable {
\r
44 get { return symTabPtr; }
\r
45 set { symTabPtr = value; }
\r
48 public uint NumberOfSymbols {
\r
49 get { return numSymbols; }
\r
50 set { numSymbols = value; }
\r
53 public short SizeOfOptionalHeader {
\r
54 get { return optHeaderSize; }
\r
55 set { optHeaderSize = value; }
\r
58 public Characteristics Characteristics {
\r
59 get { return characteristics; }
\r
60 set { characteristics = value; }
\r
63 public void Read (BinaryReader reader)
\r
65 machine = (MachineId) reader.ReadUInt16 ();
\r
66 sections = reader.ReadInt16 ();
\r
67 tdStampRaw = reader.ReadUInt32 ();
\r
68 symTabPtr = reader.ReadUInt32 ();
\r
69 numSymbols = reader.ReadUInt32 ();
\r
70 optHeaderSize = reader.ReadInt16 ();
\r
71 characteristics = (Characteristics) reader.ReadUInt16 ();
\r
74 public void Write (BinaryWriter writer)
\r
76 writer.Write ((ushort)machine);
\r
77 writer.Write (sections);
\r
78 writer.Write (tdStampRaw);
\r
79 writer.Write (symTabPtr);
\r
80 writer.Write (numSymbols);
\r
81 writer.Write (optHeaderSize);
\r
82 writer.Write ((ushort)characteristics);
\r
85 public void Dump(TextWriter writer)
\r
89 "Machine ID : {0}" + Environment.NewLine +
\r
90 "Sections : {1}" + Environment.NewLine +
\r
91 "Characteristics : {2}" + Environment.NewLine +
\r
92 "timestamp : {3}" + Environment.NewLine
\r
93 ,machine, sections, (ushort)characteristics,
\r
94 TimeStamp + " (" + tdStampRaw.ToString("X") + ")"
\r
99 public override string ToString()
\r
101 StringWriter sw = new StringWriter();
\r
103 return sw.ToString();
\r