示例#1
0
        public static void Delete(Resource resource)
        {
            var plugin = PluginFactory.GetInstance();
            ModuleDefinition moddef = null;

            foreach (var wrapper in plugin.Package.HostAssemblies)
            {
                if (wrapper.IsValid)
                {
                    if (plugin.IsAssemblyContextLoaded(wrapper.Location))
                    {
                        var context = plugin.GetAssemblyContext(wrapper.Location);
                        moddef = context.AssemblyDefinition.Modules.FirstOrDefault(
                            imoddef => imoddef.Resources.Contains(resource));
                    }
                }

                if (moddef != null)
                {
                    moddef.Resources.Remove(resource);
                }
            }
        }
示例#2
0
        private void WireAssemblyEvents(MainWindow instance)
        {
            instance.CurrentAssemblyListChanged += (sender, args) =>
            {
                if (args.NewItems != null && args.NewItems.Count > 0)
                {
                    AssemblyLoaded(this, EventArgs.Empty);
                }
                else
                {
                    // Ignore if we are hot replacing an assembly
                    if (UpdatingHostObjectModel)
                    {
                        return;
                    }

                    AssemblyUnloaded(this, EventArgs.Empty);

                    // Remove loaded contexts
                    var plugin = PluginFactory.GetInstance() as ILSpyPlugin;
                    if (plugin == null)
                    {
                        return;
                    }

                    if (args.OldItems == null)
                    {
                        return;
                    }

                    foreach (LoadedAssembly loadedAssembly in args.OldItems)
                    {
                        plugin.RemoveAssemblyContext(loadedAssembly.FileName);
                    }
                }
            };
        }
		public GenericMemberReferenceForm(T selected) : base()
		{
			InitializeComponent();

            string keyword = (typeof(T).Name.Contains("Reference")) ? "Reference" : "Definition";
            Text = Text + typeof(T).Name.Replace(keyword, string.Empty).ToLower();
            ImageList.Images.AddStrip(PluginFactory.GetInstance().GetAllBrowserImages());
			
			foreach (IAssemblyWrapper asm in PluginFactory.GetInstance().GetAssemblies(true))
			{
				AppendRootNode(asm);
			}
			
			m_orders.Add(typeof(AssemblyDefinition), 0);
			m_orders.Add(typeof(TypeDefinition), 1);
			m_orders.Add(typeof(MethodDefinition), 2);
			m_orders.Add(typeof(PropertyDefinition), 3);
			m_orders.Add(typeof(EventDefinition), 3);
			m_orders.Add(typeof(FieldDefinition), 5);
			
			TreeView.TreeViewNodeSorter = this;
			
			ButOk.Enabled = selected != null && SelectItem(selected);
		}
        public void FillControls(MethodDefinition mdef)
        {
            OpCodeBindingSource.DataSource = PluginFactory.GetInstance().GetAllOpCodes();
            OpCodes.SelectedIndex          = 0;

            Operands.Items.Add(new NoneOperandEditor());
            Operands.Items.Add(new ByteEditor());
            Operands.Items.Add(new SByteEditor());
            Operands.Items.Add(new IntegerEditor());
            Operands.Items.Add(new LongEditor());
            Operands.Items.Add(new SingleEditor());
            Operands.Items.Add(new DoubleEditor());
            Operands.Items.Add(new StringEditor());

            if (mdef.HasBody)
            {
                Operands.Items.Add(new InstructionReferenceEditor(mdef.Body.Instructions));
                Operands.Items.Add(new MultipleInstructionReferenceEditor(mdef.Body.Instructions));
                Operands.Items.Add(new VariableReferenceEditor(mdef.Body.Variables));
            }
            else
            {
                Operands.Items.Add(new GenericOperandReferenceEditor <Instruction, InstructionWrapper>(null));
                Operands.Items.Add(new MultipleInstructionReferenceEditor(null));
                Operands.Items.Add(new GenericOperandReferenceEditor <VariableDefinition, VariableWrapper>(null));
            }

            Operands.Items.Add(new ParameterReferenceEditor(mdef.Parameters));
            Operands.Items.Add(new FieldReferenceEditor());
            Operands.Items.Add(new MethodReferenceEditor());
            Operands.Items.Add(new GenericTypeReferenceEditor());
            Operands.Items.Add(new TypeReferenceEditor());
            Operands.Items.Add(new NotSupportedOperandEditor());

            Operands.SelectedIndex = 0;
        }
示例#5
0
 public void HandleItem(object item)
 {
     HandleItem(PluginFactory.GetInstance().GetEmbeddedResource(item));
 }
示例#6
0
 public bool IsItemHandled(object item)
 {
     return(PluginFactory.GetInstance().IsEmbeddedResourceHandled(item));
 }
示例#7
0
 private void SyncWarningForm_Load(object sender, System.EventArgs e)
 {
     LabWarning.Text = string.Format(LabWarning.Text, PluginFactory.GetInstance().HostApplication);
 }
 /// <summary>
 /// Assembly unloaded
 /// </summary>
 /// <param name="sender">Event sender</param>
 /// <param name="e">Event parameters</param>
 protected virtual void AssemblyUnloaded(object sender, EventArgs e)
 {
     PluginFactory.GetInstance().ReloadAssemblies(Assemblies);
     PluginFactory.GetInstance().SynchronizeAssemblyContexts(Assemblies);
 }
 bool IHandler.IsItemHandled(object item)
 {
     return(PluginFactory.GetInstance().IsFieldDefinitionHandled(item));
 }
 bool IHandler.IsItemHandled(object item)
 {
     return(PluginFactory.GetInstance().IsAssemblyNameReferenceHandled(item));
 }
        /// <summary>
        /// Addin load method
        /// </summary>
        /// <param name="serviceProvider">Cecil Studio service provider</param>
        public void Load(System.IServiceProvider serviceProvider)
        {
            PluginFactory.Register(new CecilStudioPlugin(this));

            sp  = serviceProvider;
            wm  = GetService <IWindowManager>();
            ab  = GetService <IAssemblyBrowser>();
            cbm = GetService <IBarManager>();
            am  = GetService <IAssemblyManager>();

            CheckFrameWorkVersion();

            // Main Window
            items          = new List <UIContext>();
            reflexilwindow = new Reflexil.Forms.ReflexilWindow();
            IWindow window = wm.Windows.Add(REFLEXIL_WINDOW_ID, reflexilwindow, REFLEXIL_WINDOW_TEXT);

            window.Image = BasePlugin.ReflexilImage;

            // Main button
            items.Add(new ButtonUIContext(cbm.Bars[BarNames.Toolbar]));
            items.Add(new ButtonUIContext(cbm.Bars[BarNames.Toolbar], REFLEXIL_BUTTON_TEXT, Button_Click, BasePlugin.ReflexilImage));

            using (ImageList browserimages = new ImageList())
            {
                browserimages.Images.AddStrip(PluginFactory.GetInstance().GetAllBrowserImages());
                browserimages.TransparentColor = Color.Green;

                using (ImageList barimages = new ImageList())
                {
                    barimages.Images.AddStrip(PluginFactory.GetInstance().GetAllBarImages());

                    // Menus
                    var typemenu        = AddMenu(BarNames.TypeDefinitionBrowser.ToString());
                    var assemblymenu    = AddMenu(BarNames.AssemblyDefinitionBrowser.ToString());
                    var assemblyrefmenu = AddMenu(BarNames.AssemblyNameReferenceBrowser.ToString());
                    var modulemenu      = AddMenu(BarNames.ModuleDefinitionBrowser.ToString());
                    var methodmenu      = AddMenu(BarNames.MethodDefinitionBrowser.ToString());
                    var fieldmenu       = AddMenu(BarNames.FieldDefinitionBrowser.ToString());
                    var propertymenu    = AddMenu(BarNames.PropertyDefinitionBrowser.ToString());
                    var eventmenu       = AddMenu(BarNames.EventDefinitionBrowser.ToString());

                    var allmenus     = new UIContext[] { typemenu, assemblymenu, assemblyrefmenu, modulemenu, methodmenu, fieldmenu, propertymenu, eventmenu };
                    var membersmenus = new UIContext[] { assemblyrefmenu, typemenu, methodmenu, fieldmenu, propertymenu, eventmenu };

                    // Type declaration menu
                    items.Add(new SubMenuUIContext(typemenu, "Inject inner class", (sender, e) => Inject(EInjectType.Class), browserimages.Images[(int)EBrowserImages.PublicClass]));
                    items.Add(new SubMenuUIContext(typemenu, "Inject inner interface", (sender, e) => Inject(EInjectType.Interface), browserimages.Images[(int)EBrowserImages.PublicInterface]));
                    items.Add(new SubMenuUIContext(typemenu, "Inject inner struct", (sender, e) => Inject(EInjectType.Struct), browserimages.Images[(int)EBrowserImages.PublicStructure]));
                    items.Add(new SubMenuUIContext(typemenu, "Inject inner enum", (sender, e) => Inject(EInjectType.Enum), browserimages.Images[(int)EBrowserImages.PublicEnum]));
                    items.Add(new SubMenuUIContext(typemenu));
                    items.Add(new SubMenuUIContext(typemenu, "Inject event", (sender, e) => Inject(EInjectType.Event), browserimages.Images[(int)EBrowserImages.PublicEvent]));
                    items.Add(new SubMenuUIContext(typemenu, "Inject field", (sender, e) => Inject(EInjectType.Field), browserimages.Images[(int)EBrowserImages.PublicField]));
                    items.Add(new SubMenuUIContext(typemenu, "Inject method", (sender, e) => Inject(EInjectType.Method), browserimages.Images[(int)EBrowserImages.PublicMethod]));
                    items.Add(new SubMenuUIContext(typemenu, "Inject constructor", (sender, e) => Inject(EInjectType.Constructor), browserimages.Images[(int)EBrowserImages.PublicConstructor]));
                    items.Add(new SubMenuUIContext(typemenu, "Inject property", (sender, e) => Inject(EInjectType.Property), browserimages.Images[(int)EBrowserImages.PublicProperty]));

                    // Shared subitems for Assembly/Module
                    foreach (MenuUIContext menu in new MenuUIContext[] { assemblymenu, modulemenu })
                    {
                        items.Add(new SubMenuUIContext(menu, "Inject class", (sender, e) => Inject(EInjectType.Class), browserimages.Images[(int)EBrowserImages.PublicClass]));
                        items.Add(new SubMenuUIContext(menu, "Inject interface", (sender, e) => Inject(EInjectType.Interface), browserimages.Images[(int)EBrowserImages.PublicInterface]));
                        items.Add(new SubMenuUIContext(menu, "Inject struct", (sender, e) => Inject(EInjectType.Struct), browserimages.Images[(int)EBrowserImages.PublicStructure]));
                        items.Add(new SubMenuUIContext(menu, "Inject enum", (sender, e) => Inject(EInjectType.Enum), browserimages.Images[(int)EBrowserImages.PublicEnum]));
                        items.Add(new SubMenuUIContext(menu, "Inject assembly reference", (sender, e) => Inject(EInjectType.AssemblyReference), browserimages.Images[(int)EBrowserImages.LinkedAssembly]));
                        items.Add(new SubMenuUIContext(menu));
                        items.Add(new SubMenuUIContext(menu, "Save as...", (sender, e) => AssemblyHelper.TrySaveAssembly(GetCurrentAssemblyDefinition(), GetCurrentModuleOriginalLocation()), barimages.Images[(int)EBarImages.Save]));
                        items.Add(new SubMenuUIContext(menu, "Reload", ReloadAssembly, barimages.Images[(int)EBarImages.Reload]));
                        items.Add(new SubMenuUIContext(menu, "Rename...", RenameItem, barimages.Images[(int)EBarImages.New]));
                        items.Add(new SubMenuUIContext(menu, "Verify", (sender, e) => AssemblyHelper.VerifyAssembly(GetCurrentAssemblyDefinition(), GetCurrentModuleOriginalLocation()), barimages.Images[(int)EBarImages.Check]));
                    }

                    // Shared subitems for renaming/deleting
                    foreach (MenuUIContext menu in membersmenus)
                    {
                        if (menu == typemenu)
                        {
                            items.Add(new SubMenuUIContext(menu));
                        }
                        items.Add(new SubMenuUIContext(menu, "Rename...", RenameItem, barimages.Images[(int)EBarImages.New]));
                        items.Add(new SubMenuUIContext(menu, "Delete", DeleteMember, barimages.Images[(int)EBarImages.Delete]));
                    }

                    items.AddRange(allmenus);
                }
            }

            // Main events
            ab.ActiveItemChanged += this.ActiveItemChanged;
            am.AssemblyLoaded    += this.AssemblyLoaded;
            am.AssemblyUnloaded  += this.AssemblyUnloaded;

            PluginFactory.GetInstance().ReloadAssemblies(Enumerable.ToList(am.Assemblies));
            reflexilwindow.HandleItem(ab.ActiveItem);
        }
示例#12
0
        /// <summary>
        /// Addin load method
        /// </summary>
        /// <param name="serviceProvider">Reflector service provider</param>
        public void Load(IServiceProvider serviceProvider)
        {
            PluginFactory.Register(new ReflectorPlugin(this));

            _sp  = serviceProvider;
            _wm  = GetService <IWindowManager>();
            _ab  = GetService <IAssemblyBrowser>();
            _cbm = GetService <ICommandBarManager>();
            _am  = GetService <IAssemblyManager>();

            CheckPrerequisites();

            // Main Window
            _items         = new List <UIContext>();
            ReflexilWindow = new Forms.ReflexilWindow();
            _wm.Windows.Add(ReflexilWindowId, ReflexilWindow, ReflexilWindowText);

            // Main button
            _items.Add(new ButtonUIContext(_cbm.CommandBars[ReflectorToolsId]));
            _items.Add(new ButtonUIContext(_cbm.CommandBars[ReflectorToolsId], ReflexilButtonText, Button_Click, BasePlugin.ReflexilImage));

            using (var browserimages = new ImageList())
            {
                browserimages.Images.AddStrip(PluginFactory.GetInstance().GetAllBrowserImages());
                browserimages.TransparentColor = Color.Green;

                using (var barimages = new ImageList())
                {
                    barimages.Images.AddStrip(PluginFactory.GetInstance().GetAllBarImages());

                    // Menus
                    var typemenu        = AddMenu(ReflectorTypedecId);
                    var assemblymenu    = AddMenu(ReflectorAssemblyId);
                    var assemblyrefmenu = AddMenu(ReflectorAssemblyrefId);
                    var modulemenu      = AddMenu(ReflectorModuleId);
                    var methodmenu      = AddMenu(ReflectorMethoddecId);
                    var fieldmenu       = AddMenu(ReflectorFielddecId);
                    var propertymenu    = AddMenu(ReflectorPropertydecId);
                    var eventmenu       = AddMenu(ReflectorEventdecId);
                    var resmenu         = AddMenu(ReflectorResourceId);

                    var allmenus     = new UIContext[] { typemenu, assemblymenu, assemblyrefmenu, modulemenu, methodmenu, fieldmenu, propertymenu, eventmenu, resmenu };
                    var membersmenus = new UIContext[] { assemblyrefmenu, typemenu, methodmenu, fieldmenu, propertymenu, eventmenu, resmenu };

                    // Type declaration menu
                    _items.Add(new SubMenuUIContext(typemenu, "Inject inner class", (sender, e) => Inject(EInjectType.Class), browserimages.Images[(int)EBrowserImages.PublicClass]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject inner interface", (sender, e) => Inject(EInjectType.Interface), browserimages.Images[(int)EBrowserImages.PublicInterface]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject inner struct", (sender, e) => Inject(EInjectType.Struct), browserimages.Images[(int)EBrowserImages.PublicStructure]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject inner enum", (sender, e) => Inject(EInjectType.Enum), browserimages.Images[(int)EBrowserImages.PublicEnum]));
                    _items.Add(new SubMenuUIContext(typemenu));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject event", (sender, e) => Inject(EInjectType.Event), browserimages.Images[(int)EBrowserImages.PublicEvent]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject field", (sender, e) => Inject(EInjectType.Field), browserimages.Images[(int)EBrowserImages.PublicField]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject method", (sender, e) => Inject(EInjectType.Method), browserimages.Images[(int)EBrowserImages.PublicMethod]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject constructor", (sender, e) => Inject(EInjectType.Constructor), browserimages.Images[(int)EBrowserImages.PublicConstructor]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject property", (sender, e) => Inject(EInjectType.Property), browserimages.Images[(int)EBrowserImages.PublicProperty]));

                    // Shared subitems for Assembly/Module
                    foreach (var menu in new[] { assemblymenu, modulemenu })
                    {
                        _items.Add(new SubMenuUIContext(menu, "Inject class", (sender, e) => Inject(EInjectType.Class), browserimages.Images[(int)EBrowserImages.PublicClass]));
                        _items.Add(new SubMenuUIContext(menu, "Inject interface", (sender, e) => Inject(EInjectType.Interface), browserimages.Images[(int)EBrowserImages.PublicInterface]));
                        _items.Add(new SubMenuUIContext(menu, "Inject struct", (sender, e) => Inject(EInjectType.Struct), browserimages.Images[(int)EBrowserImages.PublicStructure]));
                        _items.Add(new SubMenuUIContext(menu, "Inject enum", (sender, e) => Inject(EInjectType.Enum), browserimages.Images[(int)EBrowserImages.PublicEnum]));
                        _items.Add(new SubMenuUIContext(menu, "Inject assembly reference", (sender, e) => Inject(EInjectType.AssemblyReference), browserimages.Images[(int)EBrowserImages.LinkedAssembly]));
                        _items.Add(new SubMenuUIContext(menu, "Inject resource", (sender, e) => Inject(EInjectType.Resource), browserimages.Images[(int)EBrowserImages.Resources]));
                        _items.Add(new SubMenuUIContext(menu));
                        _items.Add(new SubMenuUIContext(menu, "Save as...", (sender, e) => AssemblyHelper.SaveAssembly(GetCurrentAssemblyDefinition(), GetCurrentModuleOriginalLocation()), barimages.Images[(int)EBarImages.Save]));
                        _items.Add(new SubMenuUIContext(menu, "Obfuscator search...", (sender, e) => AssemblyHelper.SearchObfuscator(GetCurrentModuleOriginalLocation()), barimages.Images[(int)EBarImages.Search]));
                        _items.Add(new SubMenuUIContext(menu, "Reload", ReloadAssembly, barimages.Images[(int)EBarImages.Reload]));
                        _items.Add(new SubMenuUIContext(menu, "Rename...", RenameItem, barimages.Images[(int)EBarImages.New]));
                        _items.Add(new SubMenuUIContext(menu, "Verify", (sender, e) => AssemblyHelper.VerifyAssembly(GetCurrentAssemblyDefinition(), GetCurrentModuleOriginalLocation()), barimages.Images[(int)EBarImages.Check]));
                    }

                    // Shared subitems for renaming/deleting
                    foreach (var uiContext in membersmenus)
                    {
                        var menu = (MenuUIContext)uiContext;
                        if (menu == typemenu)
                        {
                            _items.Add(new SubMenuUIContext(menu));
                        }

                        _items.Add(new SubMenuUIContext(menu, "Rename...", RenameItem, barimages.Images[(int)EBarImages.New]));
                        _items.Add(new SubMenuUIContext(menu, "Delete", DeleteMember, barimages.Images[(int)EBarImages.Delete]));
                    }

                    _items.AddRange(allmenus);
                }
            }

            // Main events
            _ab.ActiveItemChanged += ActiveItemChanged;
            _am.AssemblyLoaded    += AssemblyLoaded;
            _am.AssemblyUnloaded  += AssemblyUnloaded;

            PluginFactory.GetInstance().ReloadAssemblies(_am.Assemblies);
            ReflexilWindow.HandleItem(_ab.ActiveItem);
        }
示例#13
0
 /// <summary>
 /// When an item is deleted
 /// </summary>
 protected override void OnItemDeleted()
 {
     (PluginFactory.GetInstance() as ReflectorPlugin).RemoveFromCache(ActiveItem);
     base.OnItemDeleted();
 }
示例#14
0
 /// <summary>
 /// Assembly loaded
 /// </summary>
 /// <param name="sender">Event sender</param>
 /// <param name="e">Event parameters</param>
 protected virtual void AssemblyLoaded(object sender, EventArgs e)
 {
     PluginFactory.GetInstance().ReloadAssemblies(Assemblies);
 }
示例#15
0
 public bool IsItemHandled(object item)
 {
     return(PluginFactory.GetInstance().IsAssemblyLinkedResourceHandled(item));
 }
示例#16
0
 public void HandleItem(object item)
 {
     HandleItem(PluginFactory.GetInstance().GetAssemblyLinkedResource(item));
 }
示例#17
0
        public void Load(IServiceProvider serviceProvider)
        {
            PluginFactory.Register(new ReflectorPlugin(this));

            _sp  = serviceProvider;
            _wm  = GetService <IWindowManager>();
            _ab  = GetService <IAssemblyBrowser>();
            _cbm = GetService <ICommandBarManager>();
            _am  = GetService <IAssemblyManager>();

            // IAssemblyManager exposes HotReplaceAssembly, but we want to support older Reflector versions
            _hotReplaceAssemblyMethod = _am.GetType().GetMethod("HotReplaceAssembly", BindingFlags.Instance | BindingFlags.Public);

            // Main Window
            _items         = new List <UIContext>();
            ReflexilWindow = new Forms.ReflexilWindow();
            _wm.Windows.Add(ReflexilWindowId, ReflexilWindow, ReflexilWindowText);

            // Main button
            AddButtonSeparatorIfNeeded(ReflectorToolsId);
            _items.Add(new ButtonUIContext(_cbm.CommandBars[ReflectorToolsId], ReflexilButtonText, MainButtonClick, BasePlugin.ReflexilImage));

            AddButtonSeparatorIfNeeded(ReflectorToolBarId);
            _items.Add(new ButtonUIContext(_cbm.CommandBars[ReflectorToolBarId], ReflexilButtonText, MainButtonClick, BasePlugin.ReflexilImage));

            using (var browserimages = new ImageList())
            {
                browserimages.Images.AddStrip(PluginFactory.GetInstance().GetAllBrowserImages());
                browserimages.TransparentColor = Color.Green;

                using (var barimages = new ImageList())
                {
                    barimages.Images.AddStrip(PluginFactory.GetInstance().GetAllBarImages());

                    // Menus
                    var typemenu        = AddMenu(ReflectorTypedecId);
                    var assemblymenu    = AddMenu(ReflectorAssemblyId);
                    var assemblyrefmenu = AddMenu(ReflectorAssemblyrefId);
                    var modulemenu      = AddMenu(ReflectorModuleId);
                    var methodmenu      = AddMenu(ReflectorMethoddecId);
                    var fieldmenu       = AddMenu(ReflectorFielddecId);
                    var propertymenu    = AddMenu(ReflectorPropertydecId);
                    var eventmenu       = AddMenu(ReflectorEventdecId);
                    var resmenu         = AddMenu(ReflectorResourceId);

                    var allmenus = new[]
                    { typemenu, assemblymenu, assemblyrefmenu, modulemenu, methodmenu, fieldmenu, propertymenu, eventmenu, resmenu };
                    var membersmenus = new[]
                    { assemblyrefmenu, typemenu, methodmenu, fieldmenu, propertymenu, eventmenu, resmenu };

                    // Type declaration menu
                    _items.Add(new SubMenuUIContext(typemenu, "Inject constructor", (sender, e) => Inject(InjectType.Constructor),
                                                    browserimages.Images[(int)EBrowserImages.PublicConstructor]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject event", (sender, e) => Inject(InjectType.Event),
                                                    browserimages.Images[(int)EBrowserImages.PublicEvent]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject field", (sender, e) => Inject(InjectType.Field),
                                                    browserimages.Images[(int)EBrowserImages.PublicField]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject method", (sender, e) => Inject(InjectType.Method),
                                                    browserimages.Images[(int)EBrowserImages.PublicMethod]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject property", (sender, e) => Inject(InjectType.Property),
                                                    browserimages.Images[(int)EBrowserImages.PublicProperty]));
                    _items.Add(new SubMenuUIContext(typemenu));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject inner class", (sender, e) => Inject(InjectType.Class),
                                                    browserimages.Images[(int)EBrowserImages.PublicClass]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject inner enum", (sender, e) => Inject(InjectType.Enum),
                                                    browserimages.Images[(int)EBrowserImages.PublicEnum]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject inner interface", (sender, e) => Inject(InjectType.Interface),
                                                    browserimages.Images[(int)EBrowserImages.PublicInterface]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject inner struct", (sender, e) => Inject(InjectType.Struct),
                                                    browserimages.Images[(int)EBrowserImages.PublicStructure]));

                    // Shared subitems for Assembly/Module
                    foreach (var menu in new[] { assemblymenu, modulemenu })
                    {
                        _items.Add(new SubMenuUIContext(menu, "Inject assembly reference",
                                                        (sender, e) => Inject(InjectType.AssemblyReference), browserimages.Images[(int)EBrowserImages.LinkedAssembly]));
                        _items.Add(new SubMenuUIContext(menu, "Inject class", (sender, e) => Inject(InjectType.Class),
                                                        browserimages.Images[(int)EBrowserImages.PublicClass]));
                        _items.Add(new SubMenuUIContext(menu, "Inject enum", (sender, e) => Inject(InjectType.Enum),
                                                        browserimages.Images[(int)EBrowserImages.PublicEnum]));
                        _items.Add(new SubMenuUIContext(menu, "Inject interface", (sender, e) => Inject(InjectType.Interface),
                                                        browserimages.Images[(int)EBrowserImages.PublicInterface]));
                        _items.Add(new SubMenuUIContext(menu, "Inject struct", (sender, e) => Inject(InjectType.Struct),
                                                        browserimages.Images[(int)EBrowserImages.PublicStructure]));
                        _items.Add(new SubMenuUIContext(menu, "Inject resource", (sender, e) => Inject(InjectType.Resource),
                                                        browserimages.Images[(int)EBrowserImages.Resources]));

                        _items.Add(new SubMenuUIContext(menu));
                        _items.Add(new SubMenuUIContext(menu, "Reload Reflexil object model", ReloadAssembly, barimages.Images[(int)EBarImages.Reload]));
                        if (_hotReplaceAssemblyMethod != null)
                        {
                            _items.Add(new SubMenuUIContext(menu, "Update Reflector object model", UpdateHostObjectModel, barimages.Images[(int)EBarImages.Reload]));
                        }

                        _items.Add(new SubMenuUIContext(menu));
                        _items.Add(new SubMenuUIContext(menu, "Obfuscator search...", SearchObfuscator, barimages.Images[(int)EBarImages.Search]));
                        _items.Add(new SubMenuUIContext(menu, "Rename...", RenameItem, barimages.Images[(int)EBarImages.New]));
                        _items.Add(new SubMenuUIContext(menu, "Save as...", SaveAssembly, barimages.Images[(int)EBarImages.Save]));
                        _items.Add(new SubMenuUIContext(menu, "Verify", VerifyAssembly, barimages.Images[(int)EBarImages.Check]));
                    }

                    // Shared subitems for renaming/deleting
                    foreach (var menu in membersmenus)
                    {
                        if (menu == typemenu)
                        {
                            _items.Add(new SubMenuUIContext(menu));
                        }

                        _items.Add(new SubMenuUIContext(menu, "Delete", DeleteItem, barimages.Images[(int)EBarImages.Delete]));
                        _items.Add(new SubMenuUIContext(menu, "Rename...", RenameItem, barimages.Images[(int)EBarImages.New]));

                        if (_hotReplaceAssemblyMethod != null)
                        {
                            _items.Add(new SubMenuUIContext(menu));
                            _items.Add(new SubMenuUIContext(menu, "Update Reflector object model", UpdateHostObjectModel, barimages.Images[(int)EBarImages.Reload]));
                        }
                    }

                    _items.AddRange(allmenus);
                }
            }

            // Main events
            _ab.ActiveItemChanged += ActiveItemChanged;
            _am.AssemblyLoaded    += AssemblyLoaded;
            _am.AssemblyUnloaded  += AssemblyUnloaded;

            ReflexilWindow.HandleItem(_ab.ActiveItem);
        }
 public bool IsItemHandled(object item)
 {
     return(PluginFactory.GetInstance().IsModuleDefinitionHandled(item));
 }
 public void HandleItem(object item)
 {
     HandleItem(PluginFactory.GetInstance().GetModuleDefinition(item));
 }
 void IHandler.HandleItem(object item)
 {
     HandleItem(PluginFactory.GetInstance().GetAssemblyNameReference(item));
 }
示例#21
0
        public void Load(IServiceProvider serviceProvider)
        {
            PluginFactory.Register(new CecilStudioPlugin(this));

            _sp  = serviceProvider;
            _wm  = GetService <IWindowManager>();
            _ab  = GetService <IAssemblyBrowser>();
            _cbm = GetService <IBarManager>();
            _am  = GetService <IAssemblyManager>();

            // Main Window
            _items         = new List <UIContext>();
            ReflexilWindow = new Forms.ReflexilWindow();
            var window = _wm.Windows.Add(ReflexilWindowId, ReflexilWindow, ReflexilWindowText);

            window.Image = BasePlugin.ReflexilImage;

            // Main button
            _items.Add(new ButtonUIContext(_cbm.Bars[BarNames.Toolbar]));
            _items.Add(new ButtonUIContext(_cbm.Bars[BarNames.Toolbar], ReflexilButtonText, MainButtonClick,
                                           BasePlugin.ReflexilImage));

            using (var browserimages = new ImageList())
            {
                browserimages.Images.AddStrip(PluginFactory.GetInstance().GetAllBrowserImages());
                browserimages.TransparentColor = Color.Green;

                using (var barimages = new ImageList())
                {
                    barimages.Images.AddStrip(PluginFactory.GetInstance().GetAllBarImages());

                    // Menus
                    var typemenu        = AddMenu(BarNames.TypeDefinitionBrowser.ToString());
                    var assemblymenu    = AddMenu(BarNames.AssemblyDefinitionBrowser.ToString());
                    var assemblyrefmenu = AddMenu(BarNames.AssemblyNameReferenceBrowser.ToString());
                    var modulemenu      = AddMenu(BarNames.ModuleDefinitionBrowser.ToString());
                    var methodmenu      = AddMenu(BarNames.MethodDefinitionBrowser.ToString());
                    var fieldmenu       = AddMenu(BarNames.FieldDefinitionBrowser.ToString());
                    var propertymenu    = AddMenu(BarNames.PropertyDefinitionBrowser.ToString());
                    var eventmenu       = AddMenu(BarNames.EventDefinitionBrowser.ToString());

                    var allmenus = new UIContext[]
                    { typemenu, assemblymenu, assemblyrefmenu, modulemenu, methodmenu, fieldmenu, propertymenu, eventmenu };
                    var membersmenus = new UIContext[] { assemblyrefmenu, typemenu, methodmenu, fieldmenu, propertymenu, eventmenu };

                    // Type declaration menu
                    _items.Add(new SubMenuUIContext(typemenu, "Inject inner class", (sender, e) => Inject(InjectType.Class),
                                                    browserimages.Images[(int)EBrowserImages.PublicClass]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject inner interface", (sender, e) => Inject(InjectType.Interface),
                                                    browserimages.Images[(int)EBrowserImages.PublicInterface]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject inner struct", (sender, e) => Inject(InjectType.Struct),
                                                    browserimages.Images[(int)EBrowserImages.PublicStructure]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject inner enum", (sender, e) => Inject(InjectType.Enum),
                                                    browserimages.Images[(int)EBrowserImages.PublicEnum]));
                    _items.Add(new SubMenuUIContext(typemenu));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject event", (sender, e) => Inject(InjectType.Event),
                                                    browserimages.Images[(int)EBrowserImages.PublicEvent]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject field", (sender, e) => Inject(InjectType.Field),
                                                    browserimages.Images[(int)EBrowserImages.PublicField]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject method", (sender, e) => Inject(InjectType.Method),
                                                    browserimages.Images[(int)EBrowserImages.PublicMethod]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject constructor", (sender, e) => Inject(InjectType.Constructor),
                                                    browserimages.Images[(int)EBrowserImages.PublicConstructor]));
                    _items.Add(new SubMenuUIContext(typemenu, "Inject property", (sender, e) => Inject(InjectType.Property),
                                                    browserimages.Images[(int)EBrowserImages.PublicProperty]));

                    // Shared subitems for Assembly/Module
                    foreach (var menu in new[] { assemblymenu, modulemenu })
                    {
                        _items.Add(new SubMenuUIContext(menu, "Inject class", (sender, e) => Inject(InjectType.Class),
                                                        browserimages.Images[(int)EBrowserImages.PublicClass]));
                        _items.Add(new SubMenuUIContext(menu, "Inject interface", (sender, e) => Inject(InjectType.Interface),
                                                        browserimages.Images[(int)EBrowserImages.PublicInterface]));
                        _items.Add(new SubMenuUIContext(menu, "Inject struct", (sender, e) => Inject(InjectType.Struct),
                                                        browserimages.Images[(int)EBrowserImages.PublicStructure]));
                        _items.Add(new SubMenuUIContext(menu, "Inject enum", (sender, e) => Inject(InjectType.Enum),
                                                        browserimages.Images[(int)EBrowserImages.PublicEnum]));
                        _items.Add(new SubMenuUIContext(menu, "Inject assembly reference",
                                                        (sender, e) => Inject(InjectType.AssemblyReference), browserimages.Images[(int)EBrowserImages.LinkedAssembly]));
                        _items.Add(new SubMenuUIContext(menu));
                        _items.Add(new SubMenuUIContext(menu, "Save as...", SaveAssembly, barimages.Images[(int)EBarImages.Save]));
                        _items.Add(new SubMenuUIContext(menu, "Obfuscator search...", SearchObfuscator, barimages.Images[(int)EBarImages.Search]));
                        _items.Add(new SubMenuUIContext(menu, "Reload", ReloadAssembly, barimages.Images[(int)EBarImages.Reload]));
                        _items.Add(new SubMenuUIContext(menu, "Rename...", RenameItem, barimages.Images[(int)EBarImages.New]));
                        _items.Add(new SubMenuUIContext(menu, "Verify", VerifyAssembly, barimages.Images[(int)EBarImages.Check]));
                    }

                    // Shared subitems for renaming/deleting
                    foreach (var uiContext in membersmenus)
                    {
                        var menu = (MenuUIContext)uiContext;
                        if (menu == typemenu)
                        {
                            _items.Add(new SubMenuUIContext(menu));
                        }

                        _items.Add(new SubMenuUIContext(menu, "Rename...", RenameItem, barimages.Images[(int)EBarImages.New]));
                        _items.Add(new SubMenuUIContext(menu, "Delete", DeleteItem, barimages.Images[(int)EBarImages.Delete]));
                    }

                    _items.AddRange(allmenus);
                }
            }

            // Main events
            _ab.ActiveItemChanged += ActiveItemChanged;

            ReflexilWindow.HandleItem(_ab.ActiveItem);
        }
示例#22
0
 void IHandler.HandleItem(object item)
 {
     HandleItem(PluginFactory.GetInstance().GetFieldDefinition(item));
 }
示例#23
0
        /// <summary>
        /// Retrieve the matching assembly definition reference in the Cecil object model
        /// </summary>
        /// <param name="aloc">Reflector assembly location</param>
        /// <returns>Cecil assembly assembly definition (null if not found)</returns>
        public static AssemblyDefinition ReflectorAssemblyLocationToCecilAssemblyDefinition(IAssemblyLocation aloc)
        {
            var context = PluginFactory.GetInstance().GetAssemblyContext(aloc.Location);

            return(context != null ? context.AssemblyDefinition : null);
        }