Esempio n. 1
0
        /// <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)));
            }
        }
Esempio n. 2
0
        /// <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));
            }
        }
Esempio n. 3
0
        /// <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)));
            }
        }