示例#1
0
        void LoadMetaDataStreams()
        {
            int add = 0;

            parent._streams = new MetaDataStream[metadataHeader2.NumberOfStreams];
            for (int i = 0; i < metadataHeader2.NumberOfStreams; i++)
            {
                long offset = metadataStreamOffset + add + (i * 4);

                Structures.METADATA_STREAM_HEADER streamHeader = ntHeader._assembly._peImage.ReadStructure <Structures.METADATA_STREAM_HEADER>(offset);

                long   stringOffset = offset + 8;
                string name         = ntHeader._assembly._peImage.ReadASCIIString(stringOffset).Replace("\0", "");

                if (name.Length >= 8)
                {
                    add += 16;
                }
                else if (name.Length >= 4)
                {
                    add += 12;
                }
                else
                {
                    add += 8;
                }

                parent._streams[i] = GetHeap(ntHeader._assembly._netHeader, (int)offset, streamHeader, name);
            }

            foreach (MetaDataStream stream in parent._streams)
            {
                stream.Initialize();
            }
        }
示例#2
0
        internal MetaDataStream(NETHeader netheader, int headeroffset, Structures.METADATA_STREAM_HEADER rawHeader, string name)
        {
            this._headeroffset = headeroffset;
            this._netheader    = netheader;
            this._streamHeader = rawHeader;
            this._name         = name;
            this._indexsize    = 2;

            byte[] contents = netheader._assembly._peImage.ReadBytes(StreamOffset, (int)StreamSize);
            _mainStream = new MemoryStream();
            _binReader  = new BinaryReader(_mainStream);
            _binWriter  = new BinaryWriter(_mainStream);
            _mainStream.Write(contents, 0, contents.Length);
            _mainStream.Seek(0, SeekOrigin.Begin);
        }
示例#3
0
        internal MetaDataStream(NETHeader netheader, int headeroffset, Structures.METADATA_STREAM_HEADER rawHeader, string name)
        {
            this._headeroffset = headeroffset;
            this._netheader = netheader;
            this._streamHeader = rawHeader;
            this._name = name;
            this._indexsize = 2;

            byte[] contents = netheader._assembly._peImage.ReadBytes(StreamOffset, (int)StreamSize);
            _mainStream = new MemoryStream();
            _binReader = new BinaryReader(_mainStream);
            _binWriter = new BinaryWriter(_mainStream);
            _mainStream.Write(contents, 0, contents.Length);
            _mainStream.Seek(0, SeekOrigin.Begin);
        }
示例#4
0
        public MetaDataStream(string name, byte[] contents)
        {
            Name = name;
            this._streamHeader = new Structures.METADATA_STREAM_HEADER()
            {
                Offset = 0,
                Size = (uint)contents.Length,
            };

            _mainStream = new MemoryStream();
            _binReader = new BinaryReader(_mainStream);
            _binWriter = new BinaryWriter(_mainStream);
            _mainStream.Write(contents, 0, contents.Length);
            _mainStream.Seek(0, SeekOrigin.Begin);
        }
示例#5
0
        private MetaDataStream GetHeap(NETHeader netheader, int headeroffset, Structures.METADATA_STREAM_HEADER rawHeader, string name)
        {
            switch (name)
            {
            case "#~":
            case "#-":
                return(new TablesHeap(netheader, headeroffset, rawHeader, name));

            case "#Strings":
                return(new StringsHeap(netheader, headeroffset, rawHeader, name));

            case "#US":
                return(new UserStringsHeap(netheader, headeroffset, rawHeader, name));

            case "#GUID":
                return(new GuidHeap(netheader, headeroffset, rawHeader, name));

            case "#Blob":
                return(new BlobHeap(netheader, headeroffset, rawHeader, name));

            default:
                return(new MetaDataStream(netheader, headeroffset, rawHeader, name));
            }
        }
示例#6
0
 internal TablesHeap(NETHeader netheader, int headeroffset, Structures.METADATA_STREAM_HEADER rawHeader, string name)
     : base(netheader, headeroffset, rawHeader, name)
 {
 }