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