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

Reply via email to