Exemple #1
0
        private NuGenFoundItemEventArgs OnFoundItem(NuGenAssembly assembly, NuGenTokenBase tokenObject)
        {
            NuGenFoundItemEventArgs eventArgs   = new NuGenFoundItemEventArgs(assembly, tokenObject);
            IAsyncResult            asyncResult = CallbackForm.BeginInvoke(FoundItemCallback, this, eventArgs);

            asyncResult.AsyncWaitHandle.WaitOne();

            return(eventArgs);
        }
Exemple #2
0
        private void LocateInProjectExplorerMenuItem_Click(object sender, EventArgs e)
        {
            if (foundItemsList.SelectedItems.Count == 1)
            {
                ListViewItem   selectedItem = foundItemsList.SelectedItems[0];
                NuGenTokenBase tokenObject  = selectedItem.Tag as NuGenTokenBase;

                if (tokenObject != null)
                {
                    //UIHandler.Instance.MainForm.ProjectExplorer.LocateTokenNode(tokenObject);
                }
            }
        }
        private static TreeNode SearchTokenNode(TreeNode parentNode, NuGenTokenBase parentTokenObject, string subNodeText, string nodeText)
        {
            TreeNode result = SearchNodes(parentNode, parentTokenObject);

            if (subNodeText != null && result != null)
            {
                result.Expand();
                result = FindNodeByName(result.Nodes, subNodeText);
            }

            if (result != null)
            {
                result.Expand();
                result = FindNodeByName(result.Nodes, nodeText);
            }

            return(result);
        }
Exemple #4
0
        private void Search(object searchTextObject)
        {
            bool   cancel     = false;
            string searchText = (string)searchTextObject;

            if (NuGenProject.Instance.Assemblies != null)
            {
                List <NuGenAssembly> .Enumerator assemblyEnumerator = NuGenProject.Instance.Assemblies.GetEnumerator();

                while (!cancel && assemblyEnumerator.MoveNext())
                {
                    Dictionary <uint, NuGenTokenBase> .ValueCollection.Enumerator tokenEnumerator = assemblyEnumerator.Current.AllTokens.Values.GetEnumerator();

                    if (((assemblyEnumerator.Current.SearchOptions & SearchOptions.Assembly) == SearchOptions.Assembly &&
                         assemblyEnumerator.Current.Name != null && assemblyEnumerator.Current.Name.Contains(searchText)) ||
                        (assemblyEnumerator.Current.SearchOptions & SearchOptions.TokenValues) == SearchOptions.TokenValues &&
                        assemblyEnumerator.Current.Token.ToString("x").Contains(searchText))
                    {
                        NuGenFoundItemEventArgs eventArgs = OnFoundItem(assemblyEnumerator.Current, assemblyEnumerator.Current);

                        cancel = eventArgs.Cancel;
                    }

                    while (!cancel && tokenEnumerator.MoveNext())
                    {
                        NuGenTokenBase tokenObject   = tokenEnumerator.Current;
                        SearchOptions  searchOptions = assemblyEnumerator.Current.SearchOptions;

                        if ((tokenObject.ItemType != SearchOptions.None &&
                             (searchOptions & tokenObject.ItemType) == tokenObject.ItemType &&
                             ((searchText.Length == 0 ||
                               (tokenObject.Name != null && tokenObject.Name.Contains(searchText))))) ||
                            ((searchOptions & SearchOptions.TokenValues) == SearchOptions.TokenValues &&
                             tokenObject.Token.ToString("x").Contains(searchText) &&
                             tokenObject.ItemType != SearchOptions.None))
                        {
                            NuGenFoundItemEventArgs eventArgs = OnFoundItem(assemblyEnumerator.Current, tokenObject);

                            cancel = eventArgs.Cancel;
                        }
                    }
                }
            }
        }
 public NuGenFoundItemEventArgs(NuGenAssembly assembly, NuGenTokenBase foundTokenObject)
 {
     Assembly         = assembly;
     FoundTokenObject = foundTokenObject;
 }
        private static TreeNode SearchNodes(TreeNode parentNode, NuGenTokenBase tokenObject)
        {
            TreeNode result = null;

            if (parentNode != null)
            {
                switch (tokenObject.ItemType)
                {
                case SearchOptions.Assembly:
                    NuGenAssembly assembly = (NuGenAssembly)tokenObject;
                    parentNode.Expand();
                    result = FindNodeByName(parentNode.Nodes, assembly.FileName);
                    break;

                case SearchOptions.AssemblyReference:
                    NuGenAssemblyReference assemblyReference = (NuGenAssemblyReference)tokenObject;

                    result = SearchTokenNode(parentNode, assemblyReference.Assembly, " References", assemblyReference.Name);
                    break;

                case SearchOptions.FieldDefintion:
                    NuGenFieldDefinition fieldDefinition = (NuGenFieldDefinition)tokenObject;

                    result = SearchTokenNode(parentNode, fieldDefinition.BaseTypeDefinition, "Fields", fieldDefinition.Name);
                    break;

                case SearchOptions.File:
                    NuGenFile file = (NuGenFile)tokenObject;

                    result = SearchTokenNode(parentNode, file.Assembly, " Files", file.Name);
                    break;

                case SearchOptions.ManifestResource:
                    NuGenManifestResource manifestResource = (NuGenManifestResource)tokenObject;

                    result = SearchTokenNode(parentNode, manifestResource.Assembly, " Manifest Resources", manifestResource.Name);
                    break;

                case SearchOptions.MethodDefinition:
                    NuGenMethodDefinition methodDefinition = (NuGenMethodDefinition)tokenObject;

                    if (methodDefinition.OwnerProperty == null)
                    {
                        result = SearchTokenNode(parentNode, methodDefinition.BaseTypeDefinition, "Methods", methodDefinition.DisplayName);
                    }
                    else
                    {
                        result = SearchNodes(parentNode, methodDefinition.OwnerProperty);
                        result.Expand();
                        result = FindNodeByName(result.Nodes, methodDefinition.DisplayName);
                    }
                    break;

                case SearchOptions.ModuleReference:
                    NuGenModuleReference moduleReference = (NuGenModuleReference)tokenObject;

                    result = SearchTokenNode(parentNode, moduleReference.Assembly, " Module References", moduleReference.Name);
                    break;

                case SearchOptions.ModuleScope:
                    NuGenModuleScope moduleScope = (NuGenModuleScope)tokenObject;

                    result = SearchTokenNode(parentNode, moduleScope.Assembly, null, moduleScope.Name);
                    break;

                case SearchOptions.Property:
                    NuGenProperty property = (NuGenProperty)tokenObject;

                    result = SearchTokenNode(parentNode, property.BaseTypeDefinition, "Properties", property.Name);
                    break;

                case SearchOptions.TypeDefinition:
                    NuGenTypeDefinition typeDefinition = (NuGenTypeDefinition)tokenObject;
                    string typeNamespace = typeDefinition.Namespace;

                    if (typeNamespace.Length == 0)
                    {
                        typeNamespace = NuGenConstants.DefaultNamespaceName;
                    }

                    result = SearchTokenNode(parentNode, typeDefinition.ModuleScope, typeNamespace, typeDefinition.FullName);
                    break;
                }
            }

            return(result);
        }
 public static TreeNode LocateNode(TreeNode startingNode, NuGenTokenBase tokenObject)
 {
     return(SearchNodes(startingNode, tokenObject));
 }
Exemple #8
0
        public void DisplayCallStack(List <FrameWrapper> callStack)
        {
            if (callStack != null)
            {
                callStackView.BeginUpdate();
                callStackView.Items.Clear();

                for (int index = 0; index < callStack.Count; index++)
                {
                    FrameWrapper    frame           = callStack[index];
                    ListViewItem    item            = new ListViewItem();
                    bool            isCodeAvailable = false;
                    FunctionWrapper function        = null;

                    try
                    {
                        function        = frame.GetFunction();
                        isCodeAvailable = true;
                    }
                    catch (COMException comException)
                    {
                        //0x80131309 == CORDBG_E_CODE_NOT_AVAILABLE
                        if ((uint)comException.ErrorCode == 0x80131309)
                        {
                            isCodeAvailable = false;
                        }
                        else
                        {
                            throw;
                        }
                    }

                    if (isCodeAvailable)
                    {
                        ModuleWrapper module        = function.GetModule();
                        uint          functionToken = function.GetToken();

                        NuGenTokenBase        tokenObject      = NuGenHelperFunctions.FindObjectByToken(functionToken, module);
                        NuGenMethodDefinition methodDefinition = tokenObject as NuGenMethodDefinition;

                        if (methodDefinition != null)
                        {
                            bool activeFrame = (index == 0);
                            NuGenFrameInformation frameInformation = new NuGenFrameInformation(NuGenDebugEventHandler.Instance.EventObjects.Thread, methodDefinition, activeFrame, frame);
                            item.Tag  = frameInformation;
                            item.Text = string.Format("{0}::{1}", methodDefinition.BaseTypeDefinition.FullName, methodDefinition.DisplayName);

                            if (!frameInformation.IsExactLocation)
                            {
                                item.Text += " - not exact offset";
                            }
                        }
                        else
                        {
                            string moduleName = module.GetName();

                            if (module.IsInMemory())
                            {
                                item.Tag = new NuGenMissingModule(module);
                            }
                            else
                            {
                                item.Tag = new NuGenMissingModule(moduleName);
                            }

                            item.Text = "Unknown method (perhaps a reference is not loaded). Module name: " + moduleName;
                        }
                    }

                    if (!frame.IsILFrame())
                    {
                        if (isCodeAvailable)
                        {
                            item.Text = "Native frame, IP offset is not available (" + item.Text + ")";
                        }
                        else
                        {
                            item.Text = "Native frame, IP offset is not available (code is unavailable).";
                        }
                    }

                    item.ToolTipText = item.Text;
                    callStackView.Items.Add(item);
                }

                callStackView.EndUpdate();
            }
        }
 public void LocateTokenNode(NuGenTokenBase tokenObject)
 {
     ProjectElements.SelectedNode = NuGenTreeViewSearcher.LocateNode(ProjectElements.Nodes[0], tokenObject);
 }