static StorageStreamType GetStorageStreamType(DotNetStream stream) { if (stream == null) { return(Nodes.StorageStreamType.None); } if (stream is StringsStream) { return(Nodes.StorageStreamType.Strings); } if (stream is USStream) { return(Nodes.StorageStreamType.US); } if (stream is BlobStream) { return(Nodes.StorageStreamType.Blob); } if (stream is GuidStream) { return(Nodes.StorageStreamType.Guid); } if (stream is TablesStream) { return(Nodes.StorageStreamType.Tables); } if (stream.Name == "#!") { return(Nodes.StorageStreamType.HotHeap); } Debug.Fail(string.Format("Shouldn't be here when stream is a known stream type: {0}", stream.GetType())); return(Nodes.StorageStreamType.None); }
public StorageStreamNode(HexDocument doc, StreamHeader sh, int streamNumber, DotNetStream knownStream, IMetaData md) : base((ulong)sh.StartOffset, (ulong)sh.EndOffset - 1) { this.StreamNumber = streamNumber; this.StorageStreamType = GetStorageStreamType(knownStream); this.storageStreamVM = new StorageStreamVM(this, doc, StartOffset, (int)(EndOffset - StartOffset + 1 - 8)); var tblStream = knownStream as TablesStream; if (tblStream != null) { this.newChild = new TablesStreamNode(doc, tblStream, md); } }
public static void ShowStream(IApp app, IDataModel model, IPEImage image, DotNetStream stream, uint begin, uint size) { TreeNavigator.Create() .Path <dnModuleModel>(m => m.Module.Image == image ? NavigationState.In : NavigationState.Next) .Path <MetaDataModel>(m => NavigationState.In) .Path <MDStreamModel>(m => m.Stream == stream ? NavigationState.Done : NavigationState.Next) .Path <MDTablesStreamModel>(m => m.Stream == stream ? NavigationState.Done : NavigationState.Next) .Handler(node => { if (node.Model is MDStreamModel) { var targetView = (MDStreamView)app.Views.LocateViews(node.Model).Single(); targetView.SelectHexRange(begin, begin + size - 1); } else if (node.Model is MDTablesStreamModel) { var targetView = (MDTablesStreamView)app.Views.LocateViews(node.Model).Single(); targetView.SelectHexRange(begin, begin + size - 1); } }) .Goto(model); }
/// <summary> /// Constructor /// </summary> /// <param name="stream">The stream whose data will be copied to the new metadata file</param> public DataReaderHeap(DotNetStream stream) { OptionalOriginalStream = stream ?? throw new ArgumentNullException(nameof(stream)); heapReader = stream.CreateReader(); Name = stream.Name; }
static ContextMenuStrip CreateStreamContextMenu(MDTableHeapView view, IMetaData metadata, DotNetStream stream) { var menu = new ContextMenuStrip(); var show = new ToolStripMenuItem("Show in " + stream.Name + " Stream"); show.Click += (sender, e) => { var gridView = (GridView)menu.SourceControl; var rowIndex = gridView.SelectedCells[0].RowIndex; if (gridView[4, rowIndex].Value == InvalidValue) { MessageBox.Show("Invalid offset.", view.App.AppName, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } var offset = Convert.ToUInt32(gridView[3, rowIndex].Value); if (offset == 0) { return; } var desc = gridView[4, rowIndex].Value; uint size = 1; if (stream is StringsStream) { size = (uint)((UTF8String)desc).DataLength + 1; } else if (stream is BlobStream) { size = (uint)gridView[4, rowIndex].Value; size += (uint)Utils.GetCompressedUInt32Length(size); } else if (stream is GuidStream) { offset = (offset - 1) * 0x10; size = 0x10; } ViewUtils.ShowStream(view.App, view.Model, metadata.PEImage, stream, offset, size); }; menu.Items.Add(show); return(menu); }
public UnknownMDHeap(MetadataEditor mdEditor, DotNetStream stream) { this.mdEditor = mdEditor ?? throw new ArgumentNullException(nameof(mdEditor)); this.stream = stream ?? throw new ArgumentNullException(nameof(stream)); }
public StorageStreamNode(HexBuffer buffer, StreamHeader sh, int streamNumber, DotNetStream knownStream, IMetaData md) : base(HexSpan.FromBounds((ulong)sh.StartOffset, (ulong)sh.EndOffset)) { StreamNumber = streamNumber; StorageStreamType = GetStorageStreamType(knownStream); storageStreamVM = new StorageStreamVM(this, buffer, Span.Start, (int)(Span.Length - 8).ToUInt64()); var tblStream = knownStream as TablesStream; if (tblStream != null) { newChild = new TablesStreamNode(buffer, tblStream, md); } }
public MDStreamModel(IMetaData metadata, DotNetStream stream) { MetaData = metadata; Stream = stream; Text = stream.Name; }