/// <inheritdoc /> public IMetadataStream ReadStream(PEReaderContext context, MetadataStreamHeader header, ref BinaryStreamReader reader) { switch (header.Name) { case TablesStream.CompressedStreamName: case TablesStream.EncStreamName: return(new SerializedTableStream(context, header.Name, reader)); case StringsStream.DefaultName: return(new SerializedStringsStream(header.Name, reader)); case UserStringsStream.DefaultName: return(new SerializedUserStringsStream(header.Name, reader)); case BlobStream.DefaultName: return(new SerializedBlobStream(header.Name, reader)); case GuidStream.DefaultName: return(new SerializedGuidStream(header.Name, reader)); default: return(new CustomMetadataStream(header.Name, DataSegment.FromReader(ref reader))); } }
/// <inheritdoc /> protected override void Initialize() { var headers = new MetadataStreamHeader[_numberOfStreams]; for (int i = 0; i < _numberOfStreams; i++) { headers[i] = MetadataStreamHeader.FromReader(_entriesReader); } for (int i = 0; i < _numberOfStreams; i++) { var header = headers[i]; var streamReader = _metadataReader.Fork(_metadataReader.FileOffset + header.Offset, headers[i].Size); Items.Add(_metadataStreamReader.ReadStream(header, streamReader)); } }
/// <summary> /// Constructs new metadata stream headers for all streams in the metadata directory. /// </summary> /// <param name="offset">The offset of the first stream header.</param> /// <returns>A list of stream headers.</returns> protected virtual IList <MetadataStreamHeader> GetStreamHeaders(uint offset) { uint sizeOfHeaders = GetSizeOfStreamHeaders(); offset += sizeOfHeaders; var result = new MetadataStreamHeader[Streams.Count]; for (int i = 0; i < result.Length; i++) { uint size = Streams[i].GetPhysicalSize(); result[i] = new MetadataStreamHeader(offset, size, Streams[i].Name); offset += size; } return(result); }
/// <inheritdoc /> public IMetadataStream ReadStream(MetadataStreamHeader header, IBinaryStreamReader reader) { switch (header.Name) { case TablesStream.CompressedStreamName: case TablesStream.EncStreamName: return(new SerializedTableStream(header.Name, DataSegment.FromReader(reader), _referenceResolver)); case StringsStream.DefaultName: return(new SerializedStringsStream(header.Name, DataSegment.FromReader(reader))); case UserStringsStream.DefaultName: return(new SerializedUserStringsStream(header.Name, DataSegment.FromReader(reader))); case BlobStream.DefaultName: return(new SerializedBlobStream(header.Name, DataSegment.FromReader(reader))); case GuidStream.DefaultName: return(new SerializedGuidStream(header.Name, DataSegment.FromReader(reader))); default: return(new CustomMetadataStream(header.Name, DataSegment.FromReader(reader))); } }