Example #1
0
        void RefreshMsilView()
        {
            MsilView.BeginUpdate();

            InstructionMap.Clear();
            MsilView.Items.Clear();

            if (SelectedNode == null || !SelectedNode.LoadMsil())
            {
                MsilView.EndUpdate();
                return;
            }

            foreach (var inst in SelectedNode.Msil)
            {
                var row = new CodeRow(inst);
                MsilView.Items.Add(row);

                InstructionMap[inst.Offset] = row;
            }

            MsilView.AutoResizeColumns(ColumnHeaderAutoResizeStyle.ColumnContent);

            MsilView.EndUpdate();
        }
Example #2
0
        private void MsilView_MouseDoubleClick(object sender, MouseEventArgs e)
        {
            if (MsilView.SelectedItems.Count == 0)
            {
                return;
            }

            var item = MsilView.SelectedItems[0] as CodeRow;

            if (item.Inst.RefId == 0)
            {
                return;
            }

            // if a goto instruction scroll down and select that
            if (item.Inst.Line.StartsWith("goto "))
            {
                item.Selected = false;

                if (InstructionMap.ContainsKey(item.Inst.RefId))
                {
                    var target = InstructionMap[item.Inst.RefId];
                    target.Selected = true;
                    MsilView.EnsureVisible(target.Index);
                }
            }
            // else this is an instruction to another method, select thats
            else
            {
                var refNode = Model.NodeModels[item.Inst.RefId];

                Main.NavigatePanelTo(refNode);
            }
        }