+\r
+//\r
+// Permission is hereby granted, free of charge, to any person obtaining\r
+// a copy of this software and associated documentation files (the\r
+// "Software"), to deal in the Software without restriction, including\r
+// without limitation the rights to use, copy, modify, merge, publish,\r
+// distribute, sublicense, and/or sell copies of the Software, and to\r
+// permit persons to whom the Software is furnished to do so, subject to\r
+// the following conditions:\r
+// \r
+// The above copyright notice and this permission notice shall be\r
+// included in all copies or substantial portions of the Software.\r
+// \r
+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
+// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
+// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
+// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\r
+// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\r
+// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\r
+// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\r
+//\r
/*\r
* Copyright (c) 2002 Sergey Chaban <serge@wildwestsoftware.com>\r
*/\r
\r
namespace Mono.PEToolkit {\r
\r
- /// <summary>\r
- /// IMAGE_FILE_HEADER\r
- /// </summary>\r
- [StructLayoutAttribute(LayoutKind.Sequential)]\r
- public struct COFFHeader {\r
-\r
- internal MachineId machine;\r
- internal short sections;\r
- internal uint tdStampRaw;\r
- internal uint symTabPtr;\r
- internal uint numSymbols;\r
- internal short optHeaderSize;\r
- internal Characteristics characteristics;\r
-\r
+ public class COFFHeader {\r
\r
+ private MachineId machine;\r
+ private short sections;\r
+ private uint tdStampRaw;\r
+ private uint symTabPtr;\r
+ private uint numSymbols;\r
+ private short optHeaderSize;\r
+ private Characteristics characteristics;\r
\r
- /// <summary>\r
- /// Machine identifier.\r
- /// </summary>\r
public MachineId Machine {\r
- get {\r
- return machine;\r
- }\r
- set {\r
- machine = value;\r
- }\r
+ get { return machine; }\r
+ set { machine = value; }\r
}\r
\r
-\r
- /// <summary>\r
- /// </summary>\r
public short NumberOfSections {\r
- get {\r
- return sections;\r
- }\r
- set {\r
- sections = value;\r
- }\r
+ get { return sections; }\r
+ set { sections = value; }\r
}\r
\r
-\r
- /// <summary>\r
- /// </summary>\r
public uint TimeDateStamp {\r
- get {\r
- return tdStampRaw;\r
- }\r
- set {\r
- tdStampRaw = value;\r
- }\r
+ get { return tdStampRaw; }\r
+ set { tdStampRaw = value; }\r
}\r
\r
- /// <summary>\r
- /// </summary>\r
public DateTime TimeStamp {\r
get {\r
return (new DateTime(1970, 1, 1) +\r
}\r
}\r
\r
-\r
- /// <summary>\r
- /// </summary>\r
public uint PointerToSymbolTable {\r
- get {\r
- return symTabPtr;\r
- }\r
- set {\r
- symTabPtr = value;\r
- }\r
+ get { return symTabPtr; }\r
+ set { symTabPtr = value; }\r
}\r
\r
-\r
- /// <summary>\r
- /// </summary>\r
public uint NumberOfSymbols {\r
- get {\r
- return numSymbols;\r
- }\r
- set {\r
- numSymbols = value;\r
- }\r
+ get { return numSymbols; }\r
+ set { numSymbols = value; }\r
}\r
\r
-\r
- /// <summary>\r
- /// </summary>\r
public short SizeOfOptionalHeader {\r
- get {\r
- return optHeaderSize;\r
- }\r
- set {\r
- optHeaderSize = value;\r
- }\r
+ get { return optHeaderSize; }\r
+ set { optHeaderSize = value; }\r
}\r
\r
-\r
- /// <summary>\r
- /// </summary>\r
public Characteristics Characteristics {\r
- get {\r
- return characteristics;\r
- }\r
- set {\r
- characteristics = value;\r
- }\r
+ get { return characteristics; }\r
+ set { characteristics = value; }\r
}\r
\r
-\r
- /// <summary>\r
- /// </summary>\r
- unsafe public void Read(BinaryReader reader) {\r
- fixed (void* pThis = &this) {\r
- PEUtils.ReadStruct(reader, pThis, sizeof (COFFHeader), typeof (COFFHeader));\r
- }\r
+ public void Read (BinaryReader reader) \r
+ {\r
+ machine = (MachineId) reader.ReadUInt16 ();\r
+ sections = reader.ReadInt16 ();\r
+ tdStampRaw = reader.ReadUInt32 ();\r
+ symTabPtr = reader.ReadUInt32 ();\r
+ numSymbols = reader.ReadUInt32 ();\r
+ optHeaderSize = reader.ReadInt16 ();\r
+ characteristics = (Characteristics) reader.ReadUInt16 (); \r
}\r
\r
+ public void Write (BinaryWriter writer) \r
+ {\r
+ writer.Write ((ushort)machine);\r
+ writer.Write (sections);\r
+ writer.Write (tdStampRaw);\r
+ writer.Write (symTabPtr);\r
+ writer.Write (numSymbols);\r
+ writer.Write (optHeaderSize);\r
+ writer.Write ((ushort)characteristics); \r
+ }\r
\r
- /// <summary>\r
- /// </summary>\r
- /// <param name="writer"></param>\r
public void Dump(TextWriter writer)\r
{\r
writer.WriteLine(\r
- "Machine ID : {0}" + Environment.NewLine +\r
+ "Machine ID : {0}" + Environment.NewLine + \r
"Sections : {1}" + Environment.NewLine +\r
- "timestamp : {2}" + Environment.NewLine +\r
- "Characteristics : {3}" + Environment.NewLine,\r
- machine, sections,\r
- TimeStamp + " (" + tdStampRaw.ToString("X") + ")",\r
- characteristics + " (0x" + characteristics.ToString("X") + ")"\r
+ "Characteristics : {2}" + Environment.NewLine +\r
+ "timestamp : {3} ({4})" + Environment.NewLine\r
+ ,machine, sections, (ushort)characteristics,\r
+ TimeStamp, tdStampRaw.ToString("X")\r
);\r
- }\r
+ } \r
\r
- /// <summary>\r
- /// </summary>\r
- /// <returns></returns>\r
public override string ToString()\r
{\r
StringWriter sw = new StringWriter();\r
return sw.ToString();\r
}\r
\r
-\r
-\r
}\r
}\r
+\r