예제 #1
0
        internal static uint?AskForToken(string title)
        {
            var ask = new AskForInput();

            ask.Owner           = MainWindow.Instance;
            ask.Title           = title;
            ask.label.Content   = "_Metadata token";
            ask.textBox.Text    = "";
            ask.textBox.ToolTip = "Enter an MD token: 0x06001234 or 0x0200ABCD";
            ask.ShowDialog();
            if (ask.DialogResult != true)
            {
                return(null);
            }
            string tokenText = ask.textBox.Text;

            tokenText = tokenText.Trim();
            if (string.IsNullOrEmpty(tokenText))
            {
                return(null);
            }

            string error;
            uint   token = NumberVMUtils.ParseUInt32(tokenText, uint.MinValue, uint.MaxValue, out error);

            if (!string.IsNullOrEmpty(error))
            {
                MainWindow.Instance.ShowMessageBox(error);
                return(null);
            }

            return(token);
        }
예제 #2
0
        public override void Execute(MDTableContext context)
        {
            var ask = new AskForInput();

            ask.Owner         = MainWindow.Instance;
            ask.Title         = "Go to RID";
            ask.label.Content = "_RID";
            ask.ShowDialog();
            if (ask.DialogResult != true)
            {
                return;
            }

            string error;
            uint   rid = NumberVMUtils.ParseUInt32(ask.textBox.Text, 1, context.MetaDataTableVM.Rows, out error);

            if (!string.IsNullOrEmpty(error))
            {
                MainWindow.Instance.ShowMessageBox(error);
                return;
            }
            if (rid == 0 || rid > context.MetaDataTableVM.Rows)
            {
                MainWindow.Instance.ShowMessageBox(string.Format("Invalid RID: {0}", rid));
                return;
            }

            var recVM = context.MetaDataTableVM.Get((int)(rid - 1));

            UIUtils.ScrollSelectAndSetFocus(context.ListView, recVM);
        }
예제 #3
0
        protected override void Execute(DnHexBox dnHexBox)
        {
            var sel = dnHexBox.Selection;

            if (sel == null)
            {
                return;
            }

            var ask = new AskForInput();

            ask.Owner         = MainWindow.Instance;
            ask.Title         = "Enter Value";
            ask.label.Content = "_Byte";
            ask.textBox.Text  = "0xFF";
            ask.ShowDialog();
            if (ask.DialogResult != true)
            {
                return;
            }

            string error;
            byte   b = NumberVMUtils.ParseByte(ask.textBox.Text, byte.MinValue, byte.MaxValue, out error);

            if (!string.IsNullOrEmpty(error))
            {
                MainWindow.Instance.ShowMessageBox(error);
                return;
            }

            dnHexBox.FillBytes(sel.Value.StartOffset, sel.Value.EndOffset, b);
            dnHexBox.Selection = null;
        }
예제 #4
0
        internal static void Execute()
        {
            TabStateDecompile tabState;
            var module = GetModule(out tabState);

            if (module == null)
            {
                return;
            }

            var ask = new AskForInput();

            ask.Owner           = MainWindow.Instance;
            ask.Title           = "Go to MD Token";
            ask.label.Content   = "_Metadata token";
            ask.textBox.Text    = "";
            ask.textBox.ToolTip = "Enter a hexadecimal MD token: 0x06001234 or 0200ABCD";
            ask.ShowDialog();
            if (ask.DialogResult != true)
            {
                return;
            }
            uint   token;
            string tokenText = ask.textBox.Text;

            tokenText = tokenText.Trim();
            if (string.IsNullOrEmpty(tokenText))
            {
                return;
            }
            if (tokenText.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
            {
                tokenText = tokenText.Substring(2);
            }
            if (!uint.TryParse(tokenText, NumberStyles.HexNumber, null, out token))
            {
                MainWindow.Instance.ShowMessageBox(string.Format("Invalid hex number: {0}", tokenText));
                return;
            }

            var memberRef = module.ResolveToken(token) as IMemberRef;
            var member    = MainWindow.ResolveReference(memberRef);

            if (member == null)
            {
                if (memberRef == null)
                {
                    MainWindow.Instance.ShowMessageBox(string.Format("Invalid metadata token: 0x{0:X8}", token));
                }
                else
                {
                    MainWindow.Instance.ShowMessageBox(string.Format("Could not resolve member reference token: 0x{0:X8}", token));
                }
                return;
            }

            MainWindow.Instance.JumpToReference(tabState.TextView, member);
        }
        internal static void Execute()
        {
            DecompileTabState tabState;
            var module = GetModule(out tabState);

            if (module == null)
            {
                return;
            }

            var ask = new AskForInput();

            ask.Owner           = MainWindow.Instance;
            ask.Title           = "Go to MD Token";
            ask.label.Content   = "_Metadata token";
            ask.textBox.Text    = "";
            ask.textBox.ToolTip = "Enter an MD token: 0x06001234 or 0x0200ABCD";
            ask.ShowDialog();
            if (ask.DialogResult != true)
            {
                return;
            }
            string tokenText = ask.textBox.Text;

            tokenText = tokenText.Trim();
            if (string.IsNullOrEmpty(tokenText))
            {
                return;
            }

            string error;
            uint   token = NumberVMUtils.ParseUInt32(tokenText, uint.MinValue, uint.MaxValue, out error);

            if (!string.IsNullOrEmpty(error))
            {
                MainWindow.Instance.ShowMessageBox(error);
                return;
            }

            var memberRef = module.ResolveToken(token) as IMemberRef;
            var member    = MainWindow.ResolveReference(memberRef);

            if (member == null)
            {
                if (memberRef == null)
                {
                    MainWindow.Instance.ShowMessageBox(string.Format("Invalid metadata token: 0x{0:X8}", token));
                }
                else
                {
                    MainWindow.Instance.ShowMessageBox(string.Format("Could not resolve member reference token: 0x{0:X8}", token));
                }
                return;
            }

            MainWindow.Instance.JumpToReference(tabState.TextView, member);
        }
예제 #6
0
        internal static void Execute()
        {
            TabStateDecompile tabState;
            var module = GetModule(out tabState);
            if (module == null)
                return;

            var ask = new AskForInput();
            ask.Owner = MainWindow.Instance;
            ask.Title = "Go to MD Token";
            ask.label.Content = "_Metadata token";
            ask.textBox.Text = "";
            ask.textBox.ToolTip = "Enter an MD token: 0x06001234 or 0x0200ABCD";
            ask.ShowDialog();
            if (ask.DialogResult != true)
                return;
            string tokenText = ask.textBox.Text;
            tokenText = tokenText.Trim();
            if (string.IsNullOrEmpty(tokenText))
                return;

            string error;
            uint token = AsmEditor.NumberVMUtils.ParseUInt32(tokenText, uint.MinValue, uint.MaxValue, out error);
            if (!string.IsNullOrEmpty(error)) {
                MainWindow.Instance.ShowMessageBox(error);
                return;
            }

            var memberRef = module.ResolveToken(token) as IMemberRef;
            var member = MainWindow.ResolveReference(memberRef);
            if (member == null) {
                if (memberRef == null)
                    MainWindow.Instance.ShowMessageBox(string.Format("Invalid metadata token: 0x{0:X8}", token));
                else
                    MainWindow.Instance.ShowMessageBox(string.Format("Could not resolve member reference token: 0x{0:X8}", token));
                return;
            }

            MainWindow.Instance.JumpToReference(tabState.TextView, member);
        }
예제 #7
0
		internal static void Execute()
		{
			TabStateDecompile tabState;
			var module = GetModule(out tabState);
			if (module == null)
				return;

			var ask = new AskForInput();
			ask.Owner = MainWindow.Instance;
			ask.Title = "Go to MD Token";
			ask.label.Content = "_Metadata token";
			ask.textBox.Text = "";
			ask.textBox.ToolTip = "Enter a hexadecimal MD token: 0x06001234 or 0200ABCD";
			ask.ShowDialog();
			if (ask.DialogResult != true)
				return;
			uint token;
			string tokenText = ask.textBox.Text;
			tokenText = tokenText.Trim();
			if (string.IsNullOrEmpty(tokenText))
				return;
			if (tokenText.StartsWith("0x", StringComparison.OrdinalIgnoreCase))
				tokenText = tokenText.Substring(2);
			if (!uint.TryParse(tokenText, NumberStyles.HexNumber, null, out token)) {
				MainWindow.Instance.ShowMessageBox(string.Format("Invalid hex number: {0}", tokenText));
				return;
			}

			var memberRef = module.ResolveToken(token) as IMemberRef;
			var member = MainWindow.ResolveReference(memberRef);
			if (member == null) {
				if (memberRef == null)
					MainWindow.Instance.ShowMessageBox(string.Format("Invalid metadata token: 0x{0:X8}", token));
				else
					MainWindow.Instance.ShowMessageBox(string.Format("Could not resolve member reference token: 0x{0:X8}", token));
				return;
			}

			MainWindow.Instance.JumpToReference(tabState.TextView, member);
		}
예제 #8
0
        public string GetName()
        {
            var ask = new AskForInput();

            ask.Owner         = ownerWindow ?? MainWindow.Instance;
            ask.Title         = "Add an Exception";
            ask.label.Content = "_Full name";
            ask.textBox.Text  = string.Empty;
            ask.ShowDialog();
            if (ask.DialogResult != true)
            {
                return(null);
            }
            var t = ask.textBox.Text.Trim();

            if (string.IsNullOrEmpty(t))
            {
                return(null);
            }

            return(t);
        }
예제 #9
0
        private void GoToLineExecuted(object sender, ExecutedRoutedEventArgs e)
        {
            var decompilerTextView = ActiveTextView;
            if (decompilerTextView == null)
                return;

            var ask = new AskForInput();
            ask.Owner = this;
            ask.Title = "Go to Line";
            ask.label.Content = "_Line [, column]";
            ask.textBox.Text = "";
            ask.textBox.ToolTip = "Enter a line and/or column\n10 => line 10, column 1\n,5 => column 5\n10,5 => line 10, column 5";
            ask.ShowDialog();
            if (ask.DialogResult != true)
                return;

            string lineText = ask.textBox.Text;
            int? line = null, column = null;
            Match match;
            if ((match = goToLineRegex1.Match(lineText)) != null && match.Groups.Count == 4) {
                line = TryParse(match.Groups[1].Value);
                column = match.Groups[3].Value != string.Empty ? TryParse(match.Groups[3].Value) : 1;
            }
            else if ((match = goToLineRegex2.Match(lineText)) != null && match.Groups.Count == 2) {
                line = decompilerTextView.TextEditor.TextArea.Caret.Line;
                column = TryParse(match.Groups[1].Value);
            }
            if (line == null || column == null) {
                ShowMessageBox(string.Format("Invalid line: {0}", lineText));
                return;
            }
            decompilerTextView.ScrollAndMoveCaretTo(line.Value, column.Value);
        }