Author: jbevain
Date: 2005-10-28 10:48:03 -0400 (Fri, 28 Oct 2005)
New Revision: 52325

Modified:
   trunk/cecil/lib/ChangeLog
   trunk/cecil/lib/CodeGen/templates/ImageWriter.cs
   trunk/cecil/lib/Mono.Cecil.Binary/ImageWriter.cs
   trunk/cecil/lib/Mono.Cecil.Metadata/MetadataWriter.cs
   trunk/cecil/lib/Mono.Cecil/ReflectionWriter.cs
   trunk/cecil/lib/Mono.Cecil/StructureWriter.cs
Log:
2005-10-28  Jb Evain  <[EMAIL PROTECTED]>

        * CodeGen/templates/ImageWriter.cs
          Mono.Cecil.Metadata/MetadataWriter.cs
          Mono.Cecil/StructureWriter.cs
          Mono.Cecil/ReflectionWriter.cs
          Mono.Cecil.Binary/ImageWriter.cs:
                Implement a big of public key management,
                here we reserve space for the strong name
                signature if needed.


Modified: trunk/cecil/lib/ChangeLog
===================================================================
--- trunk/cecil/lib/ChangeLog   2005-10-28 14:42:50 UTC (rev 52324)
+++ trunk/cecil/lib/ChangeLog   2005-10-28 14:48:03 UTC (rev 52325)
@@ -1,5 +1,14 @@
 2005-10-28  Jb Evain  <[EMAIL PROTECTED]>
 
+       * CodeGen/templates/ImageWriter.cs
+         Mono.Cecil.Metadata/MetadataWriter.cs
+         Mono.Cecil/StructureWriter.cs
+         Mono.Cecil/ReflectionWriter.cs
+         Mono.Cecil.Binary/ImageWriter.cs:
+               Implement a big of public key management,
+               here we reserve space for the strong name
+               signature if needed.
+
        * Mono.Cecil/StructureWriter.cs
          Mono.Cecil/StructureReader.cs:
                Disable public key writing until

Modified: trunk/cecil/lib/CodeGen/templates/ImageWriter.cs
===================================================================
--- trunk/cecil/lib/CodeGen/templates/ImageWriter.cs    2005-10-28 14:42:50 UTC 
(rev 52324)
+++ trunk/cecil/lib/CodeGen/templates/ImageWriter.cs    2005-10-28 14:48:03 UTC 
(rev 52325)
@@ -155,7 +155,7 @@
                                break;
                        }
 
-                       RVA importTable = new RVA 
(img.TextSection.VirtualAddress + m_mdWriter.ItStartPos);
+                       RVA importTable = new RVA 
(img.TextSection.VirtualAddress + m_mdWriter.ImportTablePosition);
 
                        img.PEOptionalHeader.DataDirectories.ImportTable = new 
DataDirectory (importTable, 0x57);
 
@@ -206,7 +206,7 @@
 
                public override void VisitImportTable (ImportTable it)
                {
-                       m_textWriter.BaseStream.Position = 
m_mdWriter.ItStartPos;
+                       m_textWriter.BaseStream.Position = 
m_mdWriter.ImportTablePosition;
                        m_textWriter.Write (it.ImportLookupTable.Value);
                        m_textWriter.Write (it.DateTimeStamp);
                        m_textWriter.Write (it.ForwardChain);

Modified: trunk/cecil/lib/Mono.Cecil/ReflectionWriter.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil/ReflectionWriter.cs      2005-10-28 14:42:50 UTC 
(rev 52324)
+++ trunk/cecil/lib/Mono.Cecil/ReflectionWriter.cs      2005-10-28 14:48:03 UTC 
(rev 52325)
@@ -64,6 +64,7 @@
                        set {
                                m_structureWriter = value;
                                m_mdWriter = new MetadataWriter (
+                                       m_mod.Assembly,
                                        m_mod.Image.MetadataRoot,
                                        m_structureWriter.Assembly.Kind,
                                        m_mod.Assembly.Runtime,

Modified: trunk/cecil/lib/Mono.Cecil/StructureWriter.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil/StructureWriter.cs       2005-10-28 14:42:50 UTC 
(rev 52324)
+++ trunk/cecil/lib/Mono.Cecil/StructureWriter.cs       2005-10-28 14:48:03 UTC 
(rev 52325)
@@ -73,11 +73,8 @@
                {
                        AssemblyTable asmTable = m_tableWriter.GetAssemblyTable 
();
 
-                       // TODO: public keys are not supported yet
-                       if ((name.Flags & AssemblyFlags.PublicKey) > 0)
-                               name.Flags &= ~AssemblyFlags.PublicKey;
-                       if (name.PublicKey != null || name.PublicKey.Length > 0)
-                               name.PublicKey = new byte [0];
+                       if (name.PublicKey != null && name.PublicKey.Length > 0)
+                               name.Flags |= AssemblyFlags.PublicKey;
 
                        AssemblyRow asmRow = m_rowWriter.CreateAssemblyRow (
                                name.HashAlgorithm,

Modified: trunk/cecil/lib/Mono.Cecil.Binary/ImageWriter.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil.Binary/ImageWriter.cs    2005-10-28 14:42:50 UTC 
(rev 52324)
+++ trunk/cecil/lib/Mono.Cecil.Binary/ImageWriter.cs    2005-10-28 14:48:03 UTC 
(rev 52325)
@@ -5,7 +5,7 @@
 //   Jb Evain ([EMAIL PROTECTED])
 //
 // Generated by /CodeGen/cecil-gen.rb do not edit
-// Thu Sep 29 22:11:54 CEST 2005
+// Fri Oct 28 16:44:52 CEST 2005
 //
 // (C) 2005 Jb Evain
 //
@@ -155,7 +155,7 @@
                                break;
                        }
 
-                       RVA importTable = new RVA 
(img.TextSection.VirtualAddress + m_mdWriter.ItStartPos);
+                       RVA importTable = new RVA 
(img.TextSection.VirtualAddress + m_mdWriter.ImportTablePosition);
 
                        img.PEOptionalHeader.DataDirectories.ImportTable = new 
DataDirectory (importTable, 0x57);
 
@@ -312,7 +312,7 @@
 
                public override void VisitImportTable (ImportTable it)
                {
-                       m_textWriter.BaseStream.Position = 
m_mdWriter.ItStartPos;
+                       m_textWriter.BaseStream.Position = 
m_mdWriter.ImportTablePosition;
                        m_textWriter.Write (it.ImportLookupTable.Value);
                        m_textWriter.Write (it.DateTimeStamp);
                        m_textWriter.Write (it.ForwardChain);

Modified: trunk/cecil/lib/Mono.Cecil.Metadata/MetadataWriter.cs
===================================================================
--- trunk/cecil/lib/Mono.Cecil.Metadata/MetadataWriter.cs       2005-10-28 
14:42:50 UTC (rev 52324)
+++ trunk/cecil/lib/Mono.Cecil.Metadata/MetadataWriter.cs       2005-10-28 
14:48:03 UTC (rev 52325)
@@ -37,6 +37,7 @@
 
        internal sealed class MetadataWriter : BaseMetadataVisitor {
 
+               AssemblyDefinition m_assembly;
                MetadataRoot m_root;
                TargetRuntime m_runtime;
                ImageWriter m_imgWriter;
@@ -62,14 +63,11 @@
                MemoryBinaryWriter m_fieldDataWriter;
                MemoryBinaryWriter m_resWriter;
 
-               uint m_mdStart;
-               uint m_mdSize;
+               uint m_mdStart, m_mdSize;
+               uint m_resStart, m_resSize;
+               uint m_snsStart, m_snsSize;
+               uint m_imporTableStart;
 
-               uint m_resStart;
-               uint m_resSize;
-
-               uint m_itStart;
-
                uint m_entryPointToken;
 
                RVA m_cursor = new RVA (0x2050);
@@ -78,8 +76,8 @@
                        get { return m_cilWriter; }
                }
 
-               public uint ItStartPos {
-                       get { return m_itStart; }
+               public uint ImportTablePosition {
+                       get { return m_imporTableStart; }
                }
 
                public uint EntryPointToken {
@@ -87,8 +85,10 @@
                        set { m_entryPointToken = value; }
                }
 
-               public MetadataWriter (MetadataRoot root, AssemblyKind kind, 
TargetRuntime rt, MemoryBinaryWriter writer)
+               public MetadataWriter (AssemblyDefinition asm, MetadataRoot 
root,
+                       AssemblyKind kind, TargetRuntime rt, MemoryBinaryWriter 
writer)
                {
+                       m_assembly = asm;
                        m_root = root;
                        m_runtime = rt;
                        m_imgWriter = new ImageWriter (this, kind, writer);
@@ -239,6 +239,12 @@
                        m_fieldDataWriter.QuadAlign ();
                }
 
+               uint GetStrongNameSignatureSize ()
+               {
+                       // TODO: in 1.x its 128, in 2.0 it may be more
+                       return 128;
+               }
+
                public override void VisitMetadataRoot (MetadataRoot root)
                {
                        WriteMemStream (m_cilWriter);
@@ -246,8 +252,15 @@
                        WriteMemStream (m_resWriter);
                        m_resSize = (uint) (m_binaryWriter.BaseStream.Position 
- m_resStart);
                        WriteMemStream (m_fieldDataWriter);
-                       // write strong name here
 
+                       // for now, we only reserve the place for the strong 
name signature
+                       if ((m_assembly.Name.Flags & AssemblyFlags.PublicKey) > 
0) {
+                               m_snsStart = (uint) 
m_binaryWriter.BaseStream.Position;
+                               m_snsSize = GetStrongNameSignatureSize ();
+                               m_binaryWriter.Write (new byte [m_snsSize]);
+                               m_binaryWriter.QuadAlign ();
+                       }
+
                        m_mdStart = (uint) m_binaryWriter.BaseStream.Position;
 
                        if (m_stringWriter.BaseStream.Length > 1) {
@@ -417,17 +430,21 @@
 
                        if (m_mdSize > 0)
                                img.CLIHeader.Metadata = new DataDirectory (
-                                       img.TextSection.VirtualAddress + 
m_mdStart, m_itStart - m_mdStart);
+                                       img.TextSection.VirtualAddress + 
m_mdStart, m_imporTableStart - m_mdStart);
 
                        if (m_resSize > 0)
                                img.CLIHeader.Resources = new DataDirectory (
                                        img.TextSection.VirtualAddress + 
m_resStart, m_resSize);
+
+                       if (m_snsStart > 0)
+                               img.CLIHeader.StrongNameSignature = new 
DataDirectory (
+                                       img.TextSection.VirtualAddress + 
m_snsStart, m_snsSize);
                }
 
                public override void TerminateMetadataRoot (MetadataRoot root)
                {
                        m_mdSize = (uint) (m_binaryWriter.BaseStream.Position - 
m_mdStart);
-                       m_itStart = (uint) m_binaryWriter.BaseStream.Position;
+                       m_imporTableStart = (uint) 
m_binaryWriter.BaseStream.Position;
                        m_binaryWriter.Write (new byte [0x60]); // imports
                        m_imgWriter.Initialize ();
                        PatchHeader ();

_______________________________________________
Mono-patches maillist  -  [email protected]
http://lists.ximian.com/mailman/listinfo/mono-patches

Reply via email to