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; }
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; }
public bool SetHardwareBreakpoint(IntPtr id, IntPtr address, HardwareBreakpointRegister register, HardwareBreakpointTrigger trigger, HardwareBreakpointSize size, bool set) { return(CurrentFunctions.SetHardwareBreakpoint(id, address, register, trigger, size, set)); }
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)); }
public bool SetHardwareBreakpoint(IntPtr id, IntPtr address, HardwareBreakpointRegister register, HardwareBreakpointTrigger trigger, HardwareBreakpointSize size, bool set) { // Do nothing return(false); }