2003-03-25 Zoltan Varga <vargaz@freemail.hu>
[mono.git] / mcs / class / Mono.PEToolkit / COFFHeader.cs
1 /*\r
2  * Copyright (c) 2002 Sergey Chaban <serge@wildwestsoftware.com>\r
3  */\r
4 \r
5 using System;\r
6 using System.IO;\r
7 using System.Runtime.InteropServices;\r
8 \r
9 namespace Mono.PEToolkit {\r
10 \r
11         public class COFFHeader {\r
12 \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
20 \r
21                 public MachineId Machine {\r
22                         get { return machine; }\r
23                         set { machine = value; }\r
24                 }\r
25 \r
26                 public short NumberOfSections {\r
27                         get { return sections; }\r
28                         set { sections = value; }\r
29                 }\r
30 \r
31                 public uint TimeDateStamp {\r
32                         get { return tdStampRaw; }\r
33                         set { tdStampRaw = value; }\r
34                 }\r
35 \r
36                 public DateTime TimeStamp {\r
37                         get {\r
38                                 return (new DateTime(1970, 1, 1) +\r
39                                        TimeSpan.FromSeconds(tdStampRaw)).ToLocalTime();\r
40                         }\r
41                 }\r
42 \r
43                 public uint PointerToSymbolTable {\r
44                         get { return symTabPtr; }\r
45                         set { symTabPtr = value; }\r
46                 }\r
47 \r
48                 public uint NumberOfSymbols {\r
49                         get { return numSymbols; }\r
50                         set { numSymbols = value; }\r
51                 }\r
52 \r
53                 public short SizeOfOptionalHeader {\r
54                         get { return optHeaderSize; }\r
55                         set { optHeaderSize = value; }\r
56                 }\r
57 \r
58                 public Characteristics Characteristics {\r
59                         get { return characteristics; }\r
60                         set { characteristics = value; }\r
61                 }\r
62 \r
63                 public void Read (BinaryReader reader) \r
64                 {\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
72                 }\r
73 \r
74                 public void Write (BinaryWriter writer) \r
75                 {\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
83                 }\r
84 \r
85                 public void Dump(TextWriter writer)\r
86                 {\r
87                         \r
88                         writer.WriteLine(\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
95                         );\r
96                 \r
97                 }               \r
98 \r
99                 public override string ToString()\r
100                 {\r
101                         StringWriter sw = new StringWriter();\r
102                         Dump(sw);\r
103                         return sw.ToString();\r
104                 }\r
105 \r
106         }\r
107 }\r
108 \r