Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJackson Harper <jackson@novell.com>2003-02-18 10:18:00 +0300
committerJackson Harper <jackson@novell.com>2003-02-18 10:18:00 +0300
commita9e1f121add77c06b156214de83c764c31d07df3 (patch)
tree092034d059d79241e6e91032cdddbd941e3bf4e8 /mcs/class/Mono.PEToolkit/Image.cs
parent5f7d8d9976ed5ac0e347df27596efa02b7259ce6 (diff)
* COFFHeader.cs: Convert to class, use Read and Write methods.
Compress some code * CheckSum.cs: Access Lfanew through property not field. * CorHeader.cs: Convert to class, use Read and Write methods. * DOSHeader.cs: Convert to class, use Read and Write methods, and Init method for creating new DOSHeaders * DataDir.cs: Convert to class, use Read and Write methods. * Image.cs: Access lfanew through property, add Write method. * PEHeader.cs: Convert to class, use Read and Write methods. * PEUtils.cs: Add GetString method for converting byte pointers to strings. * RVA.cs: Add Write method * Section.cs: Use PEUtils.GetString method instead of new string (byte*) * makefuile.gnu: Compile all the files I want compiled ;-) svn path=/trunk/mcs/; revision=11683
Diffstat (limited to 'mcs/class/Mono.PEToolkit/Image.cs')
-rw-r--r--mcs/class/Mono.PEToolkit/Image.cs42
1 files changed, 38 insertions, 4 deletions
diff --git a/mcs/class/Mono.PEToolkit/Image.cs b/mcs/class/Mono.PEToolkit/Image.cs
index c1399c7faf0..11b52318735 100644
--- a/mcs/class/Mono.PEToolkit/Image.cs
+++ b/mcs/class/Mono.PEToolkit/Image.cs
@@ -111,7 +111,7 @@ namespace Mono.PEToolkit {
}
dosHdr.Read(reader);
- reader.BaseStream.Position = dosHdr.lfanew;
+ reader.BaseStream.Position = dosHdr.Lfanew;
ExeSignature peSig = (ExeSignature) reader.ReadUInt16();
if (peSig != ExeSignature.NT) {
throw new Exception ("Invalid image format: cannot find PE signature.");
@@ -123,17 +123,49 @@ namespace Mono.PEToolkit {
coffHdr.Read(reader);
peHdr.Read(reader);
+
sectionsPos = reader.BaseStream.Position;
ReadSections();
-
+
if (this.IsCLI) {
+
reader.BaseStream.Position = RVAToVA(peHdr.CLIHdrDir.virtAddr);
- corHdr.Read(reader);
+ corHdr.Read (reader);
+
+ mdRoot = new MetaDataRoot(this);
+ reader.BaseStream.Position = RVAToVA(corHdr.MetaData.virtAddr);
+ mdRoot.Read(reader);
+
+ }
+
+ }
+ public void WriteHeaders (BinaryWriter writer)
+ {
+ dosHdr.Write (writer);
+ writer.BaseStream.Position = dosHdr.Lfanew;
+ writer.Write ((ushort)ExeSignature.NT);
+ writer.Write ((ushort)ExeSignature.NT2);
+
+ coffHdr.Write (writer);
+ peHdr.Write (writer);
+
+ /*
+ int pos = reader.BaseStream.Position;
+ ReadSections();
+
+ if (this.IsCLI) {
+
+ reader.BaseStream.Position = RVAToVA(peHdr.CLIHdrDir.virtAddr);
+ corHdr.Read (reader);
+
mdRoot = new MetaDataRoot(this);
reader.BaseStream.Position = RVAToVA(corHdr.MetaData.virtAddr);
mdRoot.Read(reader);
+
}
+ */
+
}
/// <summary>
@@ -160,9 +192,11 @@ namespace Mono.PEToolkit {
public void Dump(TextWriter writer)
{
writer.WriteLine (
- dosHdr.ToString() + Environment.NewLine +
+ "COFF Header:" + Environment.NewLine +
coffHdr.ToString() + Environment.NewLine +
+ "PE Header:" + Environment.NewLine +
peHdr.ToString() + Environment.NewLine +
+ "Core Header:" + Environment.NewLine +
corHdr.ToString()
);
}