Author: jbevain
Date: 2005-07-14 12:46:43 -0400 (Thu, 14 Jul 2005)
New Revision: 47311
Added:
trunk/cecil/lib/Mono.Cecil.Binary/Imports.cs
Modified:
trunk/cecil/lib/ChangeLog
trunk/cecil/lib/CodeGen/templates/ImageReader.cs
trunk/cecil/lib/Mono.Cecil.Binary/IBinaryVisitor.cs
trunk/cecil/lib/Mono.Cecil.Binary/Image.cs
trunk/cecil/lib/Mono.Cecil.Binary/ImageInitializer.cs
trunk/cecil/lib/Mono.Cecil.Binary/ImageReader.cs
trunk/cecil/lib/Mono.Cecil.dll.sources
Log:
2005-07-14 Jb Evain <[EMAIL PROTECTED]>
* CodeGen/templates/ImageReader.cs
Mono.Cecil.Binary/IBinaryVisitor.cs
Mono.Cecil.Binary/Image.cs
Mono.Cecil.Binary/ImageInitializer.cs
Mono.Cecil.Binary/Imports.cs
Mono.Cecil.Binary/ImageReader.cs:
Read Imports Tables
Modified: trunk/cecil/lib/ChangeLog
===================================================================
--- trunk/cecil/lib/ChangeLog 2005-07-14 16:38:43 UTC (rev 47310)
+++ trunk/cecil/lib/ChangeLog 2005-07-14 16:46:43 UTC (rev 47311)
@@ -1,5 +1,15 @@
2005-07-14 Jb Evain <[EMAIL PROTECTED]>
+ * CodeGen/templates/ImageReader.cs
+ Mono.Cecil.Binary/IBinaryVisitor.cs
+ Mono.Cecil.Binary/Image.cs
+ Mono.Cecil.Binary/ImageInitializer.cs
+ Mono.Cecil.Binary/Imports.cs
+ Mono.Cecil.Binary/ImageReader.cs:
+ Read Imports Tables
+
+2005-07-14 Jb Evain <[EMAIL PROTECTED]>
+
* CodeGen/cecil-gen.rb:
make codegen works on ruby 1.8.2
* CodeGen/templates/*.cs
Modified: trunk/cecil/lib/CodeGen/templates/ImageReader.cs
===================================================================
--- trunk/cecil/lib/CodeGen/templates/ImageReader.cs 2005-07-14 16:38:43 UTC
(rev 47310)
+++ trunk/cecil/lib/CodeGen/templates/ImageReader.cs 2005-07-14 16:46:43 UTC
(rev 47311)
@@ -17,6 +17,7 @@
using System;
using System.IO;
+ using System.Text;
using Mono.Cecil;
using Mono.Cecil.Metadata;
@@ -93,6 +94,14 @@
m_binaryReader.BaseStream.Position += 8 - read - 1;
<% cur_header.fields.each { |field| %>
sect.<%=field.property_name%> = <%=field.read_binary("m_binaryReader")%>;<%
print("\n") } %>
}
+
+ public void Visit (ImportAddressTable iat)
+ {
+ m_binaryReader.BaseStream.Position =
m_image.ResolveVirtualAddress (
+
m_image.PEOptionalHeader.DataDirectories.IAT.VirtualAddress);
+
+ iat.HintNameTableRVA = new RVA
(m_binaryReader.ReadUInt32 ());
+ }
<% cur_header = $headers["CLIHeader"] %>
public void Visit (CLIHeader header)
{
@@ -115,6 +124,40 @@
m_image.MetadataRoot.Accept (mrv);
}
+ public void Visit (ImportTable it)
+ {
+ m_binaryReader.BaseStream.Position =
m_image.ResolveVirtualAddress (
+
m_image.PEOptionalHeader.DataDirectories.ImportTable.VirtualAddress);
+
+ it.ImportAddressTable = new RVA
(m_binaryReader.ReadUInt32 ());
+ it.DateTimeStamp = m_binaryReader.ReadUInt32 ();
+ it.ForwardChain = m_binaryReader.ReadUInt32 ();
+ it.Name = new RVA (m_binaryReader.ReadUInt32 ());
+ it.ImportAddressTable = new RVA
(m_binaryReader.ReadUInt32 ());
+ }
+
+ public void Visit (ImportLookupTable ilt)
+ {
+ m_binaryReader.BaseStream.Position =
m_image.ResolveVirtualAddress (
+ m_image.ImportTable.ImportLookupTable.Value);
+
+ ilt.HintNameRVA = new RVA (m_binaryReader.ReadUInt32
());
+ }
+
+ public void Visit (HintNameTable hnt)
+ {
+ m_binaryReader.BaseStream.Position =
m_image.ResolveVirtualAddress (
+
m_image.ImportAddressTable.HintNameTableRVA.Value);
+
+ hnt.Hint = m_binaryReader.ReadUInt16 ();
+ hnt.RuntimeMain = Encoding.ASCII.GetString
(m_binaryReader.ReadBytes (11));
+ m_binaryReader.ReadByte ();
+ hnt.RuntimeLibrary = Encoding.ASCII.GetString
(m_binaryReader.ReadBytes (11));
+ m_binaryReader.ReadByte ();
+
+ // ep + rva
+ }
+
public void Terminate (Image img)
{
//m_binaryReader.Close();
Modified: trunk/cecil/lib/Mono.Cecil.Binary/IBinaryVisitor.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil.Binary/IBinaryVisitor.cs 2005-07-14 16:38:43 UTC
(rev 47310)
+++ trunk/cecil/lib/Mono.Cecil.Binary/IBinaryVisitor.cs 2005-07-14 16:46:43 UTC
(rev 47311)
@@ -22,7 +22,11 @@
void Visit (PEOptionalHeader.DataDirectoriesHeader header);
void Visit (SectionCollection coll);
void Visit (Section section);
+ void Visit (ImportAddressTable iat);
void Visit (CLIHeader header);
+ void Visit (ImportTable it);
+ void Visit (ImportLookupTable ilt);
+ void Visit (HintNameTable hnt);
void Terminate (Image img);
}
Modified: trunk/cecil/lib/Mono.Cecil.Binary/Image.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil.Binary/Image.cs 2005-07-14 16:38:43 UTC (rev
47310)
+++ trunk/cecil/lib/Mono.Cecil.Binary/Image.cs 2005-07-14 16:46:43 UTC (rev
47311)
@@ -25,7 +25,11 @@
private SectionCollection m_sections;
+ private ImportAddressTable m_importAddressTable;
private CLIHeader m_cliHeader;
+ private ImportTable m_importTable;
+ private ImportLookupTable m_importLookupTable;
+ private HintNameTable m_hintNameTable;
private MetadataRoot m_mdRoot;
@@ -47,6 +51,10 @@
get { return m_sections; }
}
+ public ImportAddressTable ImportAddressTable {
+ get { return m_importAddressTable; }
+ }
+
public CLIHeader CLIHeader {
get { return m_cliHeader; }
}
@@ -55,6 +63,18 @@
get { return m_mdRoot; }
}
+ public ImportTable ImportTable {
+ get { return m_importTable; }
+ }
+
+ public ImportLookupTable ImportLookupTable {
+ get { return m_importLookupTable; }
+ }
+
+ public HintNameTable HintNameTable {
+ get { return m_hintNameTable; }
+ }
+
public FileInfo FileInformation {
get { return m_img; }
}
@@ -65,7 +85,11 @@
m_peFileHeader = new PEFileHeader ();
m_peOptionalHeader = new PEOptionalHeader ();
m_sections = new SectionCollection ();
+ m_importAddressTable = new ImportAddressTable ();
m_cliHeader = new CLIHeader ();
+ m_importTable = new ImportTable ();
+ m_importLookupTable = new ImportLookupTable ();
+ m_hintNameTable = new HintNameTable ();
m_mdRoot = new MetadataRoot (this);
}
@@ -95,8 +119,13 @@
m_sections.Accept (visitor);
+ m_importAddressTable.Accept (visitor);
m_cliHeader.Accept (visitor);
+ m_importTable.Accept (visitor);
+ m_importLookupTable.Accept (visitor);
+ m_hintNameTable.Accept (visitor);
+
visitor.Terminate (this);
}
Modified: trunk/cecil/lib/Mono.Cecil.Binary/ImageInitializer.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil.Binary/ImageInitializer.cs 2005-07-14
16:38:43 UTC (rev 47310)
+++ trunk/cecil/lib/Mono.Cecil.Binary/ImageInitializer.cs 2005-07-14
16:46:43 UTC (rev 47311)
@@ -86,12 +86,28 @@
sect.SetDefaultValues ();
}
+ public void Visit (ImportAddressTable iat)
+ {
+ }
+
public void Visit (CLIHeader header)
{
header.SetDefaultValues ();
m_image.MetadataRoot.Accept (m_mdinit);
}
+ public void Visit (ImportTable it)
+ {
+ }
+
+ public void Visit (ImportLookupTable ilt)
+ {
+ }
+
+ public void Visit (HintNameTable hnt)
+ {
+ }
+
public void Terminate (Image img)
{
}
Modified: trunk/cecil/lib/Mono.Cecil.Binary/ImageReader.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil.Binary/ImageReader.cs 2005-07-14 16:38:43 UTC
(rev 47310)
+++ trunk/cecil/lib/Mono.Cecil.Binary/ImageReader.cs 2005-07-14 16:46:43 UTC
(rev 47311)
@@ -9,7 +9,7 @@
* See LICENSE.MIT file for more details
*
* Generated by /CodeGen/cecil-gen.rb do not edit
- * Tue Jul 05 15:48:30 Paris, Madrid 2005
+ * Thu Jul 14 18:36:48 CEST 2005
*
*****************************************************************************/
@@ -17,6 +17,7 @@
using System;
using System.IO;
+ using System.Text;
using Mono.Cecil;
using Mono.Cecil.Metadata;
@@ -199,6 +200,14 @@
}
+ public void Visit (ImportAddressTable iat)
+ {
+ m_binaryReader.BaseStream.Position =
m_image.ResolveVirtualAddress (
+
m_image.PEOptionalHeader.DataDirectories.IAT.VirtualAddress);
+
+ iat.HintNameTableRVA = new RVA
(m_binaryReader.ReadUInt32 ());
+ }
+
public void Visit (CLIHeader header)
{
if (m_image.PEOptionalHeader.DataDirectories.CLIHeader
== DataDirectory.Zero)
@@ -246,6 +255,40 @@
m_image.MetadataRoot.Accept (mrv);
}
+ public void Visit (ImportTable it)
+ {
+ m_binaryReader.BaseStream.Position =
m_image.ResolveVirtualAddress (
+
m_image.PEOptionalHeader.DataDirectories.ImportTable.VirtualAddress);
+
+ it.ImportAddressTable = new RVA
(m_binaryReader.ReadUInt32 ());
+ it.DateTimeStamp = m_binaryReader.ReadUInt32 ();
+ it.ForwardChain = m_binaryReader.ReadUInt32 ();
+ it.Name = new RVA (m_binaryReader.ReadUInt32 ());
+ it.ImportAddressTable = new RVA
(m_binaryReader.ReadUInt32 ());
+ }
+
+ public void Visit (ImportLookupTable ilt)
+ {
+ m_binaryReader.BaseStream.Position =
m_image.ResolveVirtualAddress (
+ m_image.ImportTable.ImportLookupTable.Value);
+
+ ilt.HintNameRVA = new RVA (m_binaryReader.ReadUInt32
());
+ }
+
+ public void Visit (HintNameTable hnt)
+ {
+ m_binaryReader.BaseStream.Position =
m_image.ResolveVirtualAddress (
+
m_image.ImportAddressTable.HintNameTableRVA.Value);
+
+ hnt.Hint = m_binaryReader.ReadUInt16 ();
+ hnt.RuntimeMain = Encoding.ASCII.GetString
(m_binaryReader.ReadBytes (11));
+ m_binaryReader.ReadByte ();
+ hnt.RuntimeLibrary = Encoding.ASCII.GetString
(m_binaryReader.ReadBytes (11));
+ m_binaryReader.ReadByte ();
+
+ // ep + rva
+ }
+
public void Terminate (Image img)
{
//m_binaryReader.Close();
Added: trunk/cecil/lib/Mono.Cecil.Binary/Imports.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil.Binary/Imports.cs 2005-07-14 16:38:43 UTC
(rev 47310)
+++ trunk/cecil/lib/Mono.Cecil.Binary/Imports.cs 2005-07-14 16:46:43 UTC
(rev 47311)
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2004, 2005 DotNetGuru and the individuals listed
+ * on the ChangeLog entries.
+ *
+ * Authors :
+ * Jb Evain ([EMAIL PROTECTED])
+ *
+ * This is a free software distributed under a MIT/X11 license
+ * See LICENSE.MIT file for more details
+ *
+ *****************************************************************************/
+
+namespace Mono.Cecil.Binary {
+
+ public sealed class ImportAddressTable : IBinaryVisitable {
+
+ public RVA HintNameTableRVA;
+
+ internal ImportAddressTable ()
+ {
+ }
+
+ public void Accept (IBinaryVisitor visitor)
+ {
+ visitor.Visit (this);
+ }
+ }
+
+ public sealed class ImportTable : IBinaryVisitable {
+
+ public RVA ImportLookupTable;
+ public uint DateTimeStamp;
+ public uint ForwardChain;
+ public RVA Name;
+ public RVA ImportAddressTable;
+
+ internal ImportTable ()
+ {
+ }
+
+ public void Accept (IBinaryVisitor visitor)
+ {
+ visitor.Visit (this);
+ }
+ }
+
+ public sealed class ImportLookupTable : IBinaryVisitable {
+
+ public RVA HintNameRVA;
+
+ internal ImportLookupTable ()
+ {
+ }
+
+ public void Accept (IBinaryVisitor visitor)
+ {
+ visitor.Visit (this);
+ }
+ }
+
+ public sealed class HintNameTable : IBinaryVisitable {
+
+ public ushort Hint;
+ public string RuntimeMain;
+ public string RuntimeLibrary;
+ public ushort EntryPoint;
+
+ internal HintNameTable ()
+ {
+ }
+
+ public void Accept (IBinaryVisitor visitor)
+ {
+ visitor.Visit (this);
+ }
+ }
+}
Property changes on: trunk/cecil/lib/Mono.Cecil.Binary/Imports.cs
___________________________________________________________________
Name: svn:eol-style
+ native
Modified: trunk/cecil/lib/Mono.Cecil.dll.sources
===================================================================
--- trunk/cecil/lib/Mono.Cecil.dll.sources 2005-07-14 16:38:43 UTC (rev
47310)
+++ trunk/cecil/lib/Mono.Cecil.dll.sources 2005-07-14 16:46:43 UTC (rev
47311)
@@ -93,6 +93,7 @@
./Mono.Cecil.Binary/ImageCharacteristics.cs
./Mono.Cecil.Binary/ImageInitializer.cs
./Mono.Cecil.Binary/ImageReader.cs
+./Mono.Cecil.Binary/Imports.cs
./Mono.Cecil.Binary/PEFileHeader.cs
./Mono.Cecil.Binary/PEOptionalHeader.cs
./Mono.Cecil.Binary/RuntimeImage.cs
_______________________________________________
Mono-patches maillist - [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches