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[]>(); }
/// <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 } }); }
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 }); }
/// <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++; } }
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); } }
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(); } }
/// <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)); } }
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); }
public GuidStreamEntry(GuidStream stream) : base(stream.Name) { this.Data = SimpleIndexEntry.Create <int, Guid>(stream.GetAllGUIDs()); }