コード例 #1
0
ファイル: GuidMDHeap.cs プロジェクト: ohyeah521/dnSpy-1
 public GuidMDHeap(MetadataEditor mdEditor, GuidStream guidStream)
 {
     this.mdEditor   = mdEditor ?? throw new ArgumentNullException(nameof(mdEditor));
     this.guidStream = guidStream ?? throw new ArgumentNullException(nameof(guidStream));
     currentOffset   = guidStream.StreamLength;
     newData         = new List <byte[]>();
 }
コード例 #2
0
        /// <inheritdoc />
        public IMetadata CreateMetadata()
        {
            // Create streams.
            var tablesStream      = TablesStream.CreateStream();
            var stringsStream     = StringsStream.CreateStream();
            var userStringsStream = UserStringsStream.CreateStream();
            var guidStream        = GuidStream.CreateStream();
            var blobStream        = BlobStream.CreateStream();

            // Update index sizes.
            tablesStream.StringIndexSize = stringsStream.IndexSize;
            tablesStream.GuidIndexSize   = guidStream.IndexSize;
            tablesStream.BlobIndexSize   = blobStream.IndexSize;

            // Create metadata directory.
            return(new PE.DotNet.Metadata.Metadata
            {
                VersionString = _versionString,
                Streams =
                {
                    tablesStream,
                    stringsStream,
                    userStringsStream,
                    guidStream,
                    blobStream
                }
            });
        }
コード例 #3
0
 public GuidStreamTest()
 {
     _guidStream = new SerializedGuidStream(GuidStream.DefaultName, new byte[]
     {
         0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
         0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
         0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F
     });
 }
コード例 #4
0
        /// <summary>
        /// Imports the contents of a GUID stream and indexes all present GUIDs.
        /// </summary>
        /// <param name="stream">The stream to import.</param>
        public void ImportStream(GuidStream stream)
        {
            uint index = 1;

            while (index < stream.GetPhysicalSize() / GuidStream.GuidSize + 1)
            {
                var  guid     = stream.GetGuidByIndex(index);
                uint newIndex = AppendGuid(guid);
                _guids[guid] = newIndex;

                index++;
            }
        }
コード例 #5
0
        private void LoadModuleMetadata()
        {
            MetadataRow[] table = _stream.Tables[MetadataTables.Module];
            int           count = table.Length;

            for (int i = 0; i < count; i++)
            {
                ModuleMetadataTableRow row = table[i] as ModuleMetadataTableRow;

                GuidStream stream = _references.Metadata.Streams[Streams.GuidStream] as GuidStream;

                ModuleDef module = new ModuleDef(
                    _assembly.StringStream.GetString(row.Name.Value),
                    _assembly,
                    stream.GetGuid(row.Mvid)
                    );

                _map.Add(MetadataTables.Module, row, module);
                _assembly.Modules.Add(module);
            }
        }
コード例 #6
0
 public static Entry Create(object forItem)
 {
     if (forItem is string)
     {
         return(new Entry(forItem as string));
     }
     else if (forItem is MetadataStream)
     {
         return(new MetadataStreamEntry(forItem as MetadataStream));
     }
     else if (forItem is CLRDirectory)
     {
         CLRDirectory directory = forItem as CLRDirectory;
         return(new CLRDirectoryEntry(directory));
     }
     else if (forItem is Directory)
     {
         Directory directory = forItem as Directory;
         return(new Entry(directory.Name));
     }
     else if (forItem is StringStream)
     {
         StringStream stringStream = forItem as StringStream;
         return(new StringStreamEntry(stringStream));
     }
     else if (forItem is GuidStream)
     {
         GuidStream stringStream = forItem as GuidStream;
         return(new GuidStreamEntry(stringStream));
     }
     else if (forItem is Stream)
     {
         Stream stream = forItem as Stream;
         return(new Entry(stream.Name));
     }
     else
     {
         throw new NotImplementedException();
     }
 }
コード例 #7
0
        /// <inheritdoc />
        public MetadataStream ReadStream(string streamName, ReadingContext context)
        {
            switch (streamName)
            {
            case "#-":
            case "#~":
                return(TableStream.FromReadingContext(context));

            case "#Strings":
                return(StringStream.FromReadingContext(context));

            case "#US":
                return(UserStringStream.FromReadingContext(context));

            case "#GUID":
                return(GuidStream.FromReadingContext(context));

            case "#Blob":
                return(BlobStream.FromReadingContext(context));

            default:
                return(CustomMetadataStream.FromReadingContext(context));
            }
        }
コード例 #8
0
        public static Stream Create(PeCoffFile file, uint address, int size, string name)
        {
            Stream created = null;

            switch (name)
            {
            case "#~":
                created            = new MetadataStream(file, address);
                created.StreamType = Streams.MetadataStream;
                break;

            case "#Strings":
                created            = new StringStream(file.FileContents, address, size);
                created.StreamType = Streams.StringStream;
                break;

            case "#GUID":
                created            = new GuidStream(file, address, size);
                created.StreamType = Streams.GuidStream;
                break;

            case "#Blob":
                created            = new BlobStream(file.FileContents, address, size);
                created.StreamType = Streams.BlobStream;
                break;

            case "#US":
                created            = new Stream();
                created.StreamType = Streams.USStream;
                break;
            }

            created.Name = name;

            return(created);
        }
コード例 #9
0
 public GuidStreamEntry(GuidStream stream)
     : base(stream.Name)
 {
     this.Data = SimpleIndexEntry.Create <int, Guid>(stream.GetAllGUIDs());
 }