3 // Permission is hereby granted, free of charge, to any person obtaining
4 // a copy of this software and associated documentation files (the
5 // "Software"), to deal in the Software without restriction, including
6 // without limitation the rights to use, copy, modify, merge, publish,
7 // distribute, sublicense, and/or sell copies of the Software, and to
8 // permit persons to whom the Software is furnished to do so, subject to
9 // the following conditions:
11 // The above copyright notice and this permission notice shall be
12 // included in all copies or substantial portions of the Software.
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 * Copyright (c) 2002 Sergey Chaban <serge@wildwestsoftware.com>
\r
28 using System.Runtime.InteropServices;
\r
30 namespace Mono.PEToolkit {
\r
32 public class COFFHeader {
\r
34 private MachineId machine;
\r
35 private short sections;
\r
36 private uint tdStampRaw;
\r
37 private uint symTabPtr;
\r
38 private uint numSymbols;
\r
39 private short optHeaderSize;
\r
40 private Characteristics characteristics;
\r
42 public MachineId Machine {
\r
43 get { return machine; }
\r
44 set { machine = value; }
\r
47 public short NumberOfSections {
\r
48 get { return sections; }
\r
49 set { sections = value; }
\r
52 public uint TimeDateStamp {
\r
53 get { return tdStampRaw; }
\r
54 set { tdStampRaw = value; }
\r
57 public DateTime TimeStamp {
\r
59 return (new DateTime(1970, 1, 1) +
\r
60 TimeSpan.FromSeconds(tdStampRaw)).ToLocalTime();
\r
64 public uint PointerToSymbolTable {
\r
65 get { return symTabPtr; }
\r
66 set { symTabPtr = value; }
\r
69 public uint NumberOfSymbols {
\r
70 get { return numSymbols; }
\r
71 set { numSymbols = value; }
\r
74 public short SizeOfOptionalHeader {
\r
75 get { return optHeaderSize; }
\r
76 set { optHeaderSize = value; }
\r
79 public Characteristics Characteristics {
\r
80 get { return characteristics; }
\r
81 set { characteristics = value; }
\r
84 public void Read (BinaryReader reader)
\r
86 machine = (MachineId) reader.ReadUInt16 ();
\r
87 sections = reader.ReadInt16 ();
\r
88 tdStampRaw = reader.ReadUInt32 ();
\r
89 symTabPtr = reader.ReadUInt32 ();
\r
90 numSymbols = reader.ReadUInt32 ();
\r
91 optHeaderSize = reader.ReadInt16 ();
\r
92 characteristics = (Characteristics) reader.ReadUInt16 ();
\r
95 public void Write (BinaryWriter writer)
\r
97 writer.Write ((ushort)machine);
\r
98 writer.Write (sections);
\r
99 writer.Write (tdStampRaw);
\r
100 writer.Write (symTabPtr);
\r
101 writer.Write (numSymbols);
\r
102 writer.Write (optHeaderSize);
\r
103 writer.Write ((ushort)characteristics);
\r
106 public void Dump(TextWriter writer)
\r
109 "Machine ID : {0}" + Environment.NewLine +
\r
110 "Sections : {1}" + Environment.NewLine +
\r
111 "Characteristics : {2}" + Environment.NewLine +
\r
112 "timestamp : {3} ({4})" + Environment.NewLine
\r
113 ,machine, sections, (ushort)characteristics,
\r
114 TimeStamp, tdStampRaw.ToString("X")
\r
118 public override string ToString()
\r
120 StringWriter sw = new StringWriter();
\r
122 return sw.ToString();
\r