public static void ShowMember(TreeViewX treeView, IMemberDef member) { var declTypes = new HashSet <TypeDef>(); var declType = member.DeclaringType; var ns = (member is TypeDef) ? ((TypeDef)member).Namespace : null; while (declType != null) { ns = declType.Namespace; declTypes.Add(declType); declType = declType.DeclaringType; } TreeNavigator.Create() .Path <dnModuleModel>(m => m.Module.ModuleDef == member.Module ? NavigationState.In : NavigationState.Next) .Path <ModuleModel>(m => NavigationState.In) .Path <NamespaceModel>(m => m.Namespace == ns ? NavigationState.In : NavigationState.Next) .Path <TypeModel>( m => m.Type == member ? NavigationState.Done : (declTypes.Contains(m.Type) ? NavigationState.In : NavigationState.Next)) .Path <MethodModel>(m => m.Method == member ? NavigationState.Done : NavigationState.Next) .Path <FieldModel>(m => m.Field == member ? NavigationState.Done : NavigationState.Next) .Path <PropertyModel>( m => m.Property == member ? NavigationState.Done : (m.Property.GetAccessors().Contains(member) ? NavigationState.In : NavigationState.Next)) .Path <EventModel>( m => m.Event == member ? NavigationState.Done : (m.Event.GetAccessors().Contains(member) ? NavigationState.In : NavigationState.Next)) .Goto(treeView); }
public static void ShowRawData(IApp app, IDataModel model, IPEImage image, long begin, long end) { TreeNavigator.Create() .Path <dnModuleModel>(m => m.Module.Image == image ? NavigationState.In : NavigationState.Next) .Path <RawDataModel>(m => NavigationState.Done) .Handler(node => { var targetView = (RawDataView)app.Views.LocateViews(node.Model).Single(); targetView.Select(begin, end); }) .Goto(model); }
public static void ShowToken(IApp app, IDataModel model, IPEImage image, MDToken token) { TreeNavigator.Create() .Path <dnModuleModel>(m => m.Module.Image == image ? NavigationState.In : NavigationState.Next) .Path <MetaDataModel>(m => NavigationState.In) .Path <MDTablesStreamModel>(m => NavigationState.In) .Path <MDTableHeapModel>(m => NavigationState.Done) .Handler(node => { var targetView = (MDTableHeapView)app.Views.LocateViews(node.Model).Single(); targetView.SelectItem(token); }) .Goto(model); }
public void SelectItem(MDToken token) { var table = Model.Stream.Get(token.Table); var rid = token.Rid; if (table == null || !table.IsValidRID(rid)) { MessageBox.Show("Invalid token.", App.AppName, MessageBoxButtons.OK, MessageBoxIcon.Error); return; } TreeNavigator.Create() .Path <MDTableModel>(m => m.MDTable == table ? NavigationState.In : NavigationState.Next) .Path <MDRowModel>(m => m.Rid == rid ? NavigationState.Done : NavigationState.Next) .Goto(treeView); }
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); }
public static void ShowModule(TreeViewX treeView, ModuleDef module) { TreeNavigator.Create() .Path <dnModuleModel>(m => m.Module.ModuleDef == module ? NavigationState.Done : NavigationState.Next) .Goto(treeView); }