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