2002-12-03 Gonzalo Paniagua Javier <gonzalo@ximian.com>
[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         /// <summary>\r
12         /// IMAGE_FILE_HEADER\r
13         /// </summary>\r
14         [StructLayoutAttribute(LayoutKind.Sequential)]\r
15         public struct COFFHeader {\r
16 \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
24 \r
25 \r
26 \r
27                 /// <summary>\r
28                 ///  Machine identifier.\r
29                 /// </summary>\r
30                 public MachineId Machine {\r
31                         get {\r
32                                 return machine;\r
33                         }\r
34                         set {\r
35                                 machine = value;\r
36                         }\r
37                 }\r
38 \r
39 \r
40                 /// <summary>\r
41                 /// </summary>\r
42                 public short NumberOfSections {\r
43                         get {\r
44                                 return sections;\r
45                         }\r
46                         set {\r
47                                 sections = value;\r
48                         }\r
49                 }\r
50 \r
51 \r
52                 /// <summary>\r
53                 /// </summary>\r
54                 public uint TimeDateStamp {\r
55                         get {\r
56                                 return tdStampRaw;\r
57                         }\r
58                         set {\r
59                                 tdStampRaw = value;\r
60                         }\r
61                 }\r
62 \r
63                 /// <summary>\r
64                 /// </summary>\r
65                 public DateTime TimeStamp {\r
66                         get {\r
67                                 return (new DateTime(1970, 1, 1) +\r
68                                        TimeSpan.FromSeconds(tdStampRaw)).ToLocalTime();\r
69                         }\r
70                 }\r
71 \r
72 \r
73                 /// <summary>\r
74                 /// </summary>\r
75                 public uint PointerToSymbolTable {\r
76                         get {\r
77                                 return symTabPtr;\r
78                         }\r
79                         set {\r
80                                 symTabPtr = value;\r
81                         }\r
82                 }\r
83 \r
84 \r
85                 /// <summary>\r
86                 /// </summary>\r
87                 public uint NumberOfSymbols {\r
88                         get {\r
89                                 return numSymbols;\r
90                         }\r
91                         set {\r
92                                 numSymbols = value;\r
93                         }\r
94                 }\r
95 \r
96 \r
97                 /// <summary>\r
98                 /// </summary>\r
99                 public short SizeOfOptionalHeader {\r
100                         get {\r
101                                 return optHeaderSize;\r
102                         }\r
103                         set {\r
104                                 optHeaderSize = value;\r
105                         }\r
106                 }\r
107 \r
108 \r
109                 /// <summary>\r
110                 /// </summary>\r
111                 public Characteristics Characteristics {\r
112                         get {\r
113                                 return characteristics;\r
114                         }\r
115                         set {\r
116                                 characteristics = value;\r
117                         }\r
118                 }\r
119 \r
120 \r
121                 /// <summary>\r
122                 /// </summary>\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
126                         }\r
127                 }\r
128 \r
129 \r
130                 /// <summary>\r
131                 /// </summary>\r
132                 /// <param name="writer"></param>\r
133                 public void Dump(TextWriter writer)\r
134                 {\r
135                         writer.WriteLine(\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
140                                 machine, sections,\r
141                                 TimeStamp + " (" + tdStampRaw.ToString("X") + ")",\r
142                                 characteristics + " (0x" + characteristics.ToString("X") + ")"\r
143                         );\r
144                 }\r
145 \r
146                 /// <summary>\r
147                 /// </summary>\r
148                 /// <returns></returns>\r
149                 public override string ToString()\r
150                 {\r
151                         StringWriter sw = new StringWriter();\r
152                         Dump(sw);\r
153                         return sw.ToString();\r
154                 }\r
155 \r
156 \r
157 \r
158         }\r
159 }\r