Пример #1
0
		public MetadataRowWriter (MetadataTableWriter mtwv)
		{
			m_binaryWriter = mtwv.GetWriter ();
			m_root = mtwv.GetMetadataRoot ();
			m_ciCache = new int [13];
			m_counter = new Utilities.TableRowCounter (GetNumberOfRows);
		}
Пример #2
0
 public MetadataRowReader(MetadataTableReader mtrv)
 {
     m_mtrv = mtrv;
     m_binaryReader = mtrv.GetReader ();
     m_metadataRoot = mtrv.GetMetadataRoot ();
     m_ciCache = new Hashtable ();
 }
Пример #3
0
        public MetadataWriter(AssemblyDefinition asm, MetadataRoot root,
			AssemblyKind kind, TargetRuntime rt, BinaryWriter writer)
        {
            m_assembly = asm;
            m_root = root;
            m_runtime = rt;
            m_imgWriter = new ImageWriter (this, kind, writer);
            m_binaryWriter = m_imgWriter.GetTextWriter ();

            m_stringCache = new Hashtable ();
            m_stringWriter = new MemoryBinaryWriter (Encoding.UTF8);
            m_stringWriter.Write ((byte) 0);

            m_guidCache = new Hashtable ();
            m_guidWriter = new MemoryBinaryWriter ();

            m_usCache = new Hashtable ();
            m_usWriter = new MemoryBinaryWriter (Encoding.Unicode);
            m_usWriter.Write ((byte) 0);

            m_blobCache = new Hashtable ();
            m_blobWriter = new MemoryBinaryWriter ();
            m_blobWriter.Write ((byte) 0);

            m_tWriter = new MemoryBinaryWriter ();
            m_tableWriter = new MetadataTableWriter (this, m_tWriter);

            m_cilWriter = new MemoryBinaryWriter ();

            m_fieldDataWriter = new MemoryBinaryWriter ();
            m_resWriter = new MemoryBinaryWriter ();
        }
Пример #4
0
		public MetadataTableWriter (MetadataWriter mrv, MemoryBinaryWriter writer)
		{
			m_root = mrv.GetMetadataRoot ();
			m_heap = m_root.Streams.TablesHeap;
			m_binaryWriter = writer;
			m_mrrw = new MetadataRowWriter (this);
		}
Пример #5
0
		public MetadataRowReader (MetadataTableReader mtrv)
		{
			m_mtrv = mtrv;
			m_binaryReader = mtrv.GetReader ();
			m_metadataRoot = mtrv.GetMetadataRoot ();
			m_ciCache = new int [13];
			m_counter = new Utilities.TableRowCounter (m_mtrv.GetNumberOfRows);
		}
Пример #6
0
 public MetadataTableReader(MetadataReader mrv)
 {
     m_metadataRoot = mrv.GetMetadataRoot ();
     m_heap = m_metadataRoot.Streams.TablesHeap;
     m_binaryReader = new BinaryReader (new MemoryStream (m_heap.Data));
     m_binaryReader.BaseStream.Position = 24;
     m_mrrv = new MetadataRowReader (this);
 }
Пример #7
0
 public override void TerminateMetadataRoot(MetadataRoot root)
 {
     SetHeapIndexSize (root.Streams.StringsHeap, 0x01);
     SetHeapIndexSize (root.Streams.GuidHeap, 0x02);
     SetHeapIndexSize (root.Streams.BlobHeap, 0x04);
     m_tableReader = new MetadataTableReader (this);
     root.Streams.TablesHeap.Tables.Accept (m_tableReader);
 }
Пример #8
0
        public SignatureReader(MetadataRoot root, ReflectionReader reflectReader)
        {
            m_root = root;
            m_reflectReader = reflectReader;

            m_blobData = m_root.Streams.BlobHeap != null ? m_root.Streams.BlobHeap.Data : new byte [0];

            m_signatures = new Hashtable ();
        }
Пример #9
0
 internal Image()
 {
     m_dosHeader = new DOSHeader ();
     m_peFileHeader = new PEFileHeader ();
     m_peOptionalHeader = new PEOptionalHeader ();
     m_sections = new SectionCollection ();
     m_importAddressTable = new ImportAddressTable ();
     m_importTable = new ImportTable ();
     m_importLookupTable = new ImportLookupTable ();
     m_hintNameTable = new HintNameTable ();
     m_mdRoot = new MetadataRoot (this);
 }
Пример #10
0
 public ReflectionReader(ModuleDefinition module)
 {
     m_module = module;
     m_reader = m_module.ImageReader;
     m_root = m_module.Image.MetadataRoot;
     m_tHeap = m_root.Streams.TablesHeap;
     m_checkDeleted = (m_tHeap.HeapSizes & 0x80) != 0;
     if (m_reader != null)
         m_tableReader = m_reader.MetadataReader.TableReader;
     m_codeReader = new CodeReader (this);
     m_sigReader = new SignatureReader (m_root, this);
     m_isCorlib = module.Assembly.Name.Name == Constants.Corlib;
 }
Пример #11
0
		public override void TerminateMetadataRoot (MetadataRoot root)
		{
			this.asm.ALIGN (Assembly.OBJECT_ALIGNMENT);
			this.asm.LABEL (moduleName + " MetadataRoot");
			this.asm.AddObjectFields (typeof (SharpOS.AOT.Metadata.AssemblyMetadata).ToString ());

			this.asm.ADDRESSOF (moduleName + " StringsHeap");
			this.asm.ADDRESSOF (moduleName + " BlobHeap");
			this.asm.ADDRESSOF (moduleName + " GuidHeap");
			this.asm.ADDRESSOF (moduleName + " UserStringsHeap");
			this.asm.ADDRESSOF (moduleName + " AssemblyRefArray");
			this.asm.ADDRESSOF (moduleName + " AssemblyArray");
			this.asm.ADDRESSOF (moduleName + " ClassLayoutArray");
			this.asm.ADDRESSOF (moduleName + " ConstantArray");
			this.asm.ADDRESSOF (moduleName + " CustomAttributeArray");
			this.asm.ADDRESSOF (moduleName + " DeclSecurityArray");
			this.asm.ADDRESSOF (moduleName + " EventMapArray");
			this.asm.ADDRESSOF (moduleName + " EventPtrArray");
			this.asm.ADDRESSOF (moduleName + " EventArray");
			this.asm.ADDRESSOF (moduleName + " ExportedTypeArray");
			this.asm.ADDRESSOF (moduleName + " FieldLayoutArray");
			this.asm.ADDRESSOF (moduleName + " FieldMarshalArray");
			this.asm.ADDRESSOF (moduleName + " FieldPtrArray");
			this.asm.ADDRESSOF (moduleName + " FieldRVAArray");
			this.asm.ADDRESSOF (moduleName + " FieldArray");
			this.asm.ADDRESSOF (moduleName + " FileArray");
			this.asm.ADDRESSOF (moduleName + " GenericParamConstraintArray");
			this.asm.ADDRESSOF (moduleName + " GenericParamArray");
			this.asm.ADDRESSOF (moduleName + " ImplMapArray");
			this.asm.ADDRESSOF (moduleName + " InterfaceImplArray");
			this.asm.ADDRESSOF (moduleName + " ManifestResourceArray");
			this.asm.ADDRESSOF (moduleName + " MemberRefArray");
			this.asm.ADDRESSOF (moduleName + " MethodImplArray");
			this.asm.ADDRESSOF (moduleName + " MethodPtrArray");
			this.asm.ADDRESSOF (moduleName + " MethodSemanticsArray");
			this.asm.ADDRESSOF (moduleName + " MethodSpecArray");
			this.asm.ADDRESSOF (moduleName + " MethodArray");
			this.asm.ADDRESSOF (moduleName + " ModuleRefArray");
			this.asm.ADDRESSOF (moduleName + " ModuleArray");
			this.asm.ADDRESSOF (moduleName + " NestedClassArray");
			this.asm.ADDRESSOF (moduleName + " ParamPtrArray");
			this.asm.ADDRESSOF (moduleName + " ParamArray");
			this.asm.ADDRESSOF (moduleName + " PropertyMapArray");
			this.asm.ADDRESSOF (moduleName + " PropertyPtrArray");
			this.asm.ADDRESSOF (moduleName + " PropertyArray");
			this.asm.ADDRESSOF (moduleName + " StandAloneSigArray");
			this.asm.ADDRESSOF (moduleName + " TypeDefArray");
			this.asm.ADDRESSOF (moduleName + " TypeRefArray");
			this.asm.ADDRESSOF (moduleName + " TypeSpecArray");
		}
Пример #12
0
		public override void VisitMetadataRootHeader (MetadataRoot.MetadataRootHeader header)
		{
			long headpos = m_binaryReader.BaseStream.Position;

			header.Signature = m_binaryReader.ReadUInt32 ();

			if (header.Signature != MetadataRoot.MetadataRootHeader.StandardSignature)
				throw new MetadataFormatException ("Wrong magic number");

			header.MajorVersion = m_binaryReader.ReadUInt16 ();
			header.MinorVersion = m_binaryReader.ReadUInt16 ();
			header.Reserved = m_binaryReader.ReadUInt32 ();

			// read version
			uint length = m_binaryReader.ReadUInt32 ();
			if (length != 0) {
				long pos = m_binaryReader.BaseStream.Position;

				byte [] version, buffer = new byte [length];
				int read = 0;
				while (read < length) {
					byte cur = (byte)m_binaryReader.ReadSByte ();
					if (cur == 0)
						break;
					buffer [read++] = cur;
				}
				version = new byte [read];
				Buffer.BlockCopy (buffer, 0, version, 0, read);
				header.Version = Encoding.UTF8.GetString (version, 0, version.Length);

				pos += length - headpos + 3;
				pos &= ~3;
				pos += headpos;

				m_binaryReader.BaseStream.Position = pos;
			} else
				header.Version = string.Empty;

			header.Flags = m_binaryReader.ReadUInt16 ();
			header.Streams = m_binaryReader.ReadUInt16 ();
		}
Пример #13
0
 public SecurityDeclarationReader(MetadataRoot root, ReflectionReader reader)
 {
     sr = new SignatureReader (root, reader);
 }
Пример #14
0
 public override void VisitMetadataRoot(MetadataRoot root)
 {
     root.Header  = new MetadataRoot.MetadataRootHeader();
     root.Streams = new MetadataStreamCollection();
 }
Пример #15
0
 public MetadataInitializer(ImageInitializer init)
 {
     m_root = init.Image.MetadataRoot;
 }
 public MetadataRowWriter(MetadataTableWriter mtwv)
 {
     m_binaryWriter = mtwv.GetWriter();
     m_root         = mtwv.GetMetadataRoot();
     m_ciCache      = new Hashtable();
 }
Пример #17
0
        public override void VisitMetadataRoot(MetadataRoot root)
        {
            WriteMemStream(m_cilWriter);
            WriteMemStream(m_fieldDataWriter);
            m_resStart = (uint)m_binaryWriter.BaseStream.Position;
            WriteMemStream(m_resWriter);
            m_resSize = (uint)(m_binaryWriter.BaseStream.Position - m_resStart);

            // 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();
            }

            // save place for debug header
            if (m_imgWriter.GetImage().DebugHeader != null)
            {
                m_debugHeaderStart = (uint)m_binaryWriter.BaseStream.Position;
                m_binaryWriter.Write(new byte [m_imgWriter.GetImage().DebugHeader.GetSize()]);
                m_binaryWriter.QuadAlign();
            }

            m_mdStart = (uint)m_binaryWriter.BaseStream.Position;

            if (m_stringWriter.BaseStream.Length > 1)
            {
                CreateStream(MetadataStream.Strings);
                SetHeapSize(root.Streams.StringsHeap, m_stringWriter, 0x01);
                m_stringWriter.QuadAlign();
            }

            if (m_guidWriter.BaseStream.Length > 0)
            {
                CreateStream(MetadataStream.GUID);
                SetHeapSize(root.Streams.GuidHeap, m_guidWriter, 0x02);
            }

            if (m_blobWriter.BaseStream.Length > 1)
            {
                CreateStream(MetadataStream.Blob);
                SetHeapSize(root.Streams.BlobHeap, m_blobWriter, 0x04);
                m_blobWriter.QuadAlign();
            }

            if (m_usWriter.BaseStream.Length > 2)
            {
                CreateStream(MetadataStream.UserStrings);
                m_usWriter.QuadAlign();
            }

            m_root.Header.MajorVersion = 1;
            m_root.Header.MinorVersion = 1;

            switch (m_runtime)
            {
            case TargetRuntime.NET_1_0:
                m_root.Header.Version = "v1.0.3705";
                break;

            case TargetRuntime.NET_1_1:
                m_root.Header.Version = "v1.1.4322";
                break;

            case TargetRuntime.NET_2_0:
                m_root.Header.Version = "v2.0.50727";
                break;

            case TargetRuntime.NET_4_0:
                m_root.Header.Version = "v4.0.30319";
                break;
            }

            m_root.Streams.TablesHeap.Tables.Accept(m_tableWriter);

            if (m_tWriter.BaseStream.Length == 0)
            {
                m_root.Streams.Remove(m_root.Streams.TablesHeap.GetStream());
            }
        }
Пример #18
0
 public override void TerminateMetadataRoot(MetadataRoot root)
 {
     m_mdSize = (uint) (m_binaryWriter.BaseStream.Position - m_mdStart);
     m_imporTableStart = (uint) m_binaryWriter.BaseStream.Position;
     m_binaryWriter.Write (new byte [0x60]); // imports
     m_imgWriter.Initialize ();
     PatchHeader ();
     root.GetImage ().Accept (m_imgWriter);
 }
Пример #19
0
 public MetadataRowWriter(MetadataTableWriter mtwv)
 {
     m_binaryWriter = mtwv.GetWriter ();
     m_root = mtwv.GetMetadataRoot ();
     m_ciCache = new Hashtable ();
 }
Пример #20
0
 public CodeReader(ReflectionReader reflectReader)
 {
     m_reflectReader = reflectReader;
     m_root = m_reflectReader.MetadataRoot;
 }
Пример #21
0
 public override void VisitMetadataRootHeader(MetadataRoot.MetadataRootHeader header)
 {
     m_binaryWriter.Write (header.Signature);
     m_binaryWriter.Write (header.MajorVersion);
     m_binaryWriter.Write (header.MinorVersion);
     m_binaryWriter.Write (header.Reserved);
     m_binaryWriter.Write (header.Version.Length + 3 & (~3));
     m_binaryWriter.Write (Encoding.ASCII.GetBytes (header.Version));
     m_binaryWriter.QuadAlign ();
     m_binaryWriter.Write (header.Flags);
     m_binaryWriter.Write ((ushort) m_root.Streams.Count);
 }
Пример #22
0
        public override void VisitMetadataRoot(MetadataRoot root)
        {
            WriteMemStream (m_cilWriter);
            WriteMemStream (m_fieldDataWriter);
            m_resStart = (uint) m_binaryWriter.BaseStream.Position;
            WriteMemStream (m_resWriter);
            m_resSize = (uint) (m_binaryWriter.BaseStream.Position - m_resStart);

            // 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 ();
            }

            // save place for debug header
            if (m_imgWriter.GetImage ().DebugHeader != null) {
                m_debugHeaderStart = (uint) m_binaryWriter.BaseStream.Position;
                m_binaryWriter.Write (new byte [m_imgWriter.GetImage ().DebugHeader.GetSize ()]);
                m_binaryWriter.QuadAlign ();
            }

            m_mdStart = (uint) m_binaryWriter.BaseStream.Position;

            if (m_stringWriter.BaseStream.Length > 1) {
                CreateStream (MetadataStream.Strings);
                SetHeapSize (root.Streams.StringsHeap, m_stringWriter, 0x01);
                m_stringWriter.QuadAlign ();
            }

            if (m_guidWriter.BaseStream.Length > 0) {
                CreateStream (MetadataStream.GUID);
                SetHeapSize (root.Streams.GuidHeap, m_guidWriter, 0x02);
            }

            if (m_blobWriter.BaseStream.Length > 1) {
                CreateStream (MetadataStream.Blob);
                SetHeapSize (root.Streams.BlobHeap, m_blobWriter, 0x04);
                m_blobWriter.QuadAlign ();
            }

            if (m_usWriter.BaseStream.Length > 2) {
                CreateStream (MetadataStream.UserStrings);
                m_usWriter.QuadAlign ();
            }

            m_root.Header.MajorVersion = 1;
            m_root.Header.MinorVersion = 1;

            switch (m_runtime) {
            case TargetRuntime.NET_1_0 :
                m_root.Header.Version = "v1.0.3705";
                break;
            case TargetRuntime.NET_1_1 :
                m_root.Header.Version = "v1.1.4322";
                break;
            case TargetRuntime.NET_2_0 :
                m_root.Header.Version = "v2.0.50727";
                break;
            }

            m_root.Streams.TablesHeap.Tables.Accept (m_tableWriter);

            if (m_tWriter.BaseStream.Length == 0)
                m_root.Streams.Remove (m_root.Streams.TablesHeap.GetStream ());
        }
Пример #23
0
 public MetadataRowReader(MetadataTableReader mtrv)
 {
     m_mtrv         = mtrv;
     m_binaryReader = mtrv.GetReader();
     m_metadataRoot = mtrv.GetMetadataRoot();
     m_ciCache      = new int [< %= $coded_indexes.length % >];
		public MetadataRowReader (MetadataTableReader mtrv)
		{
			m_mtrv = mtrv;
			m_binaryReader = mtrv.GetReader ();
			m_metadataRoot = mtrv.GetMetadataRoot ();
			m_ciCache = new int [<%= $coded_indexes.length %>];
		public MetadataRowWriter (MetadataTableWriter mtwv)
		{
			m_binaryWriter = mtwv.GetWriter ();
			m_root = mtwv.GetMetadataRoot ();
			m_ciCache = new int [<%= $coded_indexes.length %>];
Пример #26
0
 public MetadataInitializer(ImageInitializer init)
 {
     m_root = init.Image.MetadataRoot;
 }
Пример #27
0
 public override void VisitMetadataRoot(MetadataRoot root)
 {
     m_root = root;
     root.Header = new MetadataRoot.MetadataRootHeader ();
     root.Streams = new MetadataStreamCollection ();
 }
		public CodeReader (ReflectionReader reflectReader)
		{
			m_reflectReader = reflectReader;
			m_root = m_reflectReader.MetadataRoot;
			m_instructions = new Hashtable ();
		}
Пример #29
0
 public override void VisitMetadataRootHeader(MetadataRoot.MetadataRootHeader header)
 {
     header.SetDefaultValues ();
 }