Beispiel #1
0
 public override void VisitMetadataStreamCollection(MetadataStreamCollection coll)
 {
     for (int i = 0; i < m_root.Header.Streams; i++)
     {
         coll.Add(new MetadataStream());
     }
 }
 public StructureReader(ImageReader ir)
 {
     m_ir = ir;
     m_img = ir.Image;
     m_streams = m_img.MetadataRoot.Streams;
     m_tHeap = m_streams.TablesHeap;
     m_tableReader = ir.MetadataReader.TableReader;
 }
Beispiel #3
0
 public override void VisitMetadataStreamCollection(MetadataStreamCollection coll)
 {
     MetadataStream tables = new MetadataStream ();
     tables.Header.Name = MetadataStream.Tables;
     tables.Heap = MetadataHeap.HeapFactory (tables);
     TablesHeap th = tables.Heap as TablesHeap;
     th.Tables = new TableCollection (th);
     m_root.Streams.Add (tables);
 }
		public StructureReader (ImageReader ir)
		{
			if (ir.Image.CLIHeader == null)
				throw new ImageFormatException ("The image is not a managed assembly");

			m_ir = ir;
			m_img = ir.Image;
			m_streams = m_img.MetadataRoot.Streams;
			m_tHeap = m_streams.TablesHeap;
			m_tableReader = ir.MetadataReader.TableReader;
		}
Beispiel #5
0
        public override void VisitMetadataStreamCollection(MetadataStreamCollection coll)
        {
            MetadataStream tables = new MetadataStream();

            tables.Header.Name = MetadataStream.Tables;
            tables.Heap        = MetadataHeap.HeapFactory(tables);
            TablesHeap th = tables.Heap as TablesHeap;

            th.Tables = new TableCollection(th);
            m_root.Streams.Add(tables);
        }
Beispiel #6
0
        public override void VisitMetadataStreamCollection(MetadataStreamCollection streams)
        {
            foreach (MetadataStream stream in streams)
            {
                MetadataStream.MetadataStreamHeader header = stream.Header;

                header.Offset = (uint)(m_binaryWriter.BaseStream.Position);
                m_binaryWriter.Write(header.Offset);
                MemoryBinaryWriter container;
                string             name = header.Name;
                uint size = 0;
                switch (header.Name)
                {
                case MetadataStream.Tables:
                    container = m_tWriter;
                    size     += 24;                 // header
                    break;

                case MetadataStream.Strings:
                    name     += "\0\0\0\0";
                    container = m_stringWriter;
                    break;

                case MetadataStream.GUID:
                    container = m_guidWriter;
                    break;

                case MetadataStream.Blob:
                    container = m_blobWriter;
                    break;

                case MetadataStream.UserStrings:
                    container = m_usWriter;
                    break;

                default:
                    throw new MetadataFormatException("Unknown stream kind");
                }

                size += (uint)(container.BaseStream.Length + 3 & (~3));
                m_binaryWriter.Write(size);
                m_binaryWriter.Write(Encoding.ASCII.GetBytes(name));
                m_binaryWriter.QuadAlign();
            }
        }
 public override void VisitMetadataStreamCollection(MetadataStreamCollection coll)
 {
     for (int i = 0; i < m_root.Header.Streams; i++)
         coll.Add (new MetadataStream ());
 }
Beispiel #8
0
        public override void VisitMetadataStreamCollection(MetadataStreamCollection streams)
        {
            foreach (MetadataStream stream in streams) {
                MetadataStream.MetadataStreamHeader header = stream.Header;

                header.Offset = (uint) (m_binaryWriter.BaseStream.Position);
                m_binaryWriter.Write (header.Offset);
                MemoryBinaryWriter container;
                string name = header.Name;
                uint size = 0;
                switch (header.Name) {
                case MetadataStream.Tables :
                    container = m_tWriter;
                    size += 24; // header
                    break;
                case MetadataStream.Strings :
                    name += "\0\0\0\0";
                    container = m_stringWriter;
                    break;
                case MetadataStream.GUID :
                    container = m_guidWriter;
                    break;
                case MetadataStream.Blob :
                    container = m_blobWriter;
                    break;
                case MetadataStream.UserStrings :
                    container = m_usWriter;
                    break;
                default :
                    throw new MetadataFormatException ("Unknown stream kind");
                }

                size += (uint) (container.BaseStream.Length + 3 & (~3));
                m_binaryWriter.Write (size);
                m_binaryWriter.Write (Encoding.ASCII.GetBytes (name));
                m_binaryWriter.QuadAlign ();
            }
        }