Esempio n. 1
0
 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);
 }
Esempio n. 2
0
        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);
            }
        }
Esempio n. 3
0
 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);
 }
Esempio n. 4
0
 /// <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;
 }
Esempio n. 5
0
        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);
        }
Esempio n. 6
0
 public UnknownMDHeap(MetadataEditor mdEditor, DotNetStream stream)
 {
     this.mdEditor = mdEditor ?? throw new ArgumentNullException(nameof(mdEditor));
     this.stream   = stream ?? throw new ArgumentNullException(nameof(stream));
 }
Esempio n. 7
0
        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);
            }
        }
Esempio n. 8
0
 public MDStreamModel(IMetaData metadata, DotNetStream stream)
 {
     MetaData = metadata;
     Stream   = stream;
     Text     = stream.Name;
 }