public FoundCodeForm(RemoteProcess process, IntPtr address, HardwareBreakpointTrigger trigger)
        {
            Contract.Requires(process != null);

            this.process = process;

            InitializeComponent();

            foundCodeDataGridView.AutoGenerateColumns = false;
            infoTextBox.Font = new Font(FontFamily.GenericMonospace, infoTextBox.Font.Size);

            if (trigger == HardwareBreakpointTrigger.Write)
            {
                Text = "Find out what writes to " + address.ToString(Constants.AddressHexFormat);
            }
            else
            {
                Text = "Find out what accesses " + address.ToString(Constants.AddressHexFormat);
            }

            bannerBox.Text = Text;

            data = new DataTable();
            data.Columns.Add("counter", typeof(int));
            data.Columns.Add("instruction", typeof(string));
            data.Columns.Add("info", typeof(FoundCodeInfo));

            foundCodeDataGridView.DataSource = data;
        }
Example #2
0
        public HardwareBreakpoint(IntPtr address, HardwareBreakpointRegister register, HardwareBreakpointTrigger trigger, HardwareBreakpointSize size, BreakpointHandler handler)
        {
            Contract.Requires(handler != null);

            if (register == HardwareBreakpointRegister.InvalidRegister)
            {
                throw new InvalidOperationException();
            }

            Address  = address;
            Register = register;
            Trigger  = trigger;
            Size     = size;

            this.handler = handler;
        }
Example #3
0
 public bool SetHardwareBreakpoint(IntPtr id, IntPtr address, HardwareBreakpointRegister register, HardwareBreakpointTrigger trigger, HardwareBreakpointSize size, bool set)
 {
     return(CurrentFunctions.SetHardwareBreakpoint(id, address, register, trigger, size, set));
 }
Example #4
0
        public void FindCodeByBreakpoint(IntPtr address, int size, HardwareBreakpointTrigger trigger)
        {
            var register = GetUsableDebugRegister();

            if (register == HardwareBreakpointRegister.InvalidRegister)
            {
                throw new NoHardwareBreakpointAvailableException();
            }

            var breakpointList = SplitBreakpoint(address, size);

            var fcf = new FoundCodeForm(process, breakpointList[0].Address, trigger);

            var localBreakpoints = new List <IBreakpoint>();

            fcf.Stop += (sender, e) =>
            {
                lock (localBreakpoints)
                {
                    foreach (var bp in localBreakpoints)
                    {
                        RemoveBreakpoint(bp);
                    }

                    localBreakpoints.Clear();
                }
            };

            void HandleBreakpoint(IBreakpoint bp, ref DebugEvent evt)
            {
                fcf.AddRecord(evt.ExceptionInfo);
            }

            var breakpoint = new HardwareBreakpoint(breakpointList[0].Address, register, trigger, (HardwareBreakpointSize)breakpointList[0].Size, HandleBreakpoint);

            try
            {
                AddBreakpoint(breakpoint);
                localBreakpoints.Add(breakpoint);

                fcf.Show();
            }
            catch
            {
                fcf.Dispose();

                throw;
            }

            if (breakpointList.Count > 1)
            {
                foreach (var split in breakpointList.Skip(1))
                {
                    register = GetUsableDebugRegister();
                    if (register == HardwareBreakpointRegister.InvalidRegister)
                    {
                        break;
                    }

                    breakpoint = new HardwareBreakpoint(split.Address, register, trigger, (HardwareBreakpointSize)split.Size, HandleBreakpoint);
                    AddBreakpoint(breakpoint);
                    localBreakpoints.Add(breakpoint);
                }
            }
        }
        public bool SetHardwareBreakpoint(IntPtr id, IntPtr address, HardwareBreakpointRegister register, HardwareBreakpointTrigger trigger, HardwareBreakpointSize size, bool set)
        {
            // Not supported.

            return(false);
        }
 public bool SetHardwareBreakpoint(IntPtr id, IntPtr address, HardwareBreakpointRegister register, HardwareBreakpointTrigger trigger, HardwareBreakpointSize size, bool set)
 {
     return(setHardwareBreakpointDelegate(id, address, register, trigger, size, set));
 }
Example #7
0
 public bool SetHardwareBreakpoint(IntPtr id, IntPtr address, HardwareBreakpointRegister register, HardwareBreakpointTrigger trigger, HardwareBreakpointSize size, bool set)
 {
     // Do nothing
     return(false);
 }