2 * Copyright (c) 2002 Sergey Chaban <serge@wildwestsoftware.com>
\r
7 using System.Runtime.InteropServices;
\r
9 namespace Mono.PEToolkit {
\r
12 /// IMAGE_FILE_HEADER
\r
14 [StructLayoutAttribute(LayoutKind.Sequential)]
\r
15 public struct COFFHeader {
\r
17 internal MachineId machine;
\r
18 internal short sections;
\r
19 internal uint tdStampRaw;
\r
20 internal uint symTabPtr;
\r
21 internal uint numSymbols;
\r
22 internal short optHeaderSize;
\r
23 internal Characteristics characteristics;
\r
28 /// Machine identifier.
\r
30 public MachineId Machine {
\r
42 public short NumberOfSections {
\r
54 public uint TimeDateStamp {
\r
65 public DateTime TimeStamp {
\r
67 return (new DateTime(1970, 1, 1) +
\r
68 TimeSpan.FromSeconds(tdStampRaw)).ToLocalTime();
\r
75 public uint PointerToSymbolTable {
\r
87 public uint NumberOfSymbols {
\r
99 public short SizeOfOptionalHeader {
\r
101 return optHeaderSize;
\r
104 optHeaderSize = value;
\r
111 public Characteristics Characteristics {
\r
113 return characteristics;
\r
116 characteristics = value;
\r
123 unsafe public void Read(BinaryReader reader) {
\r
124 fixed (void* pThis = &this) {
\r
125 PEUtils.ReadStruct(reader, pThis, sizeof (COFFHeader), typeof (COFFHeader));
\r
132 /// <param name="writer"></param>
\r
133 public void Dump(TextWriter writer)
\r
136 "Machine ID : {0}" + Environment.NewLine +
\r
137 "Sections : {1}" + Environment.NewLine +
\r
138 "timestamp : {2}" + Environment.NewLine +
\r
139 "Characteristics : {3}" + Environment.NewLine,
\r
141 TimeStamp + " (" + tdStampRaw.ToString("X") + ")",
\r
142 characteristics + " (0x" + characteristics.ToString("X") + ")"
\r
148 /// <returns></returns>
\r
149 public override string ToString()
\r
151 StringWriter sw = new StringWriter();
\r
153 return sw.ToString();
\r