Beispiel #1
0
        public void ClearUsedBreakpointSlots()
        {
            RefreshMemory();
            foreach (ProcessThread th in Process.Threads)
            {
                var hThread = Kernel32.OpenThread(ThreadAccess.THREAD_ALL_ACCESS, false, th.Id);
                if (hThread == IntPtr.Zero)
                {
                    throw new BreakPointException("Can't open thread for access");
                }

                HardwareBreakPoint.UnsetSlotsFromThread(hThread, SlotFlags.All);

                if (!Kernel32.CloseHandle(hThread))
                {
                    throw new BreakPointException("Failed to close thread handle");
                }
            }
        }
Beispiel #2
0
        public void AddBreakPoint(HardwareBreakPoint Breakpoint)
        {
            if (Breakpoints.Count >= Kernel32.MaxHardwareBreakpointsCount)
            {
                throw new DebuggerException("Can't set any more breakpoints");
            }

            try
            {
                using (var suspender = MakeSuspender())
                {
                    Breakpoint.Set(this);
                    Breakpoints.Add(Breakpoint);
                }
            }
            catch (BreakPointException e)
            {
                throw new DebuggerException(e.Message);
            }
        }