如何正确删除硬件断点

问题描述

我正在尝试创建一个具有硬件断点功能的小型调试器。 我使用向量异常处理来捕获异常,并且在尝试删除断点时遇到了问题:

当处理程序重置Dr6寄存器时,可能会同时删除断点。 该处理程序已暂停,并使用修改后的Dr7寄存器切换了上下文,但是当退出该上下文时,使用Dr7寄存器在其原始状态下再次切换了上下文。

不幸的是,由于上下文切换发生在处理程序之外,因此无法同步上下文切换。

是否有一种方法只能使用 datePicker.show((binding.root.context as AppCompatActivity).supportFragmentManager,datePicker.toString()) 更改特定的寄存器?也许一般来说,有一些更好的方法可以删除断点?

处理程序:

CONTEXT::ContextFlags

删除

inline bool handle(_EXCEPTION_POINTERS* t_ExceptionInfo)
{
    if (m_index == 0xFF || t_ExceptionInfo->ExceptionRecord->ExceptionCode != STATUS_SINGLE_STEP || !(t_ExceptionInfo->ContextRecord->Dr6 & 1ui64 << m_index))
    {
        return false;
    }

    t_ExceptionInfo->ContextRecord->ContextFlags |= CONTEXT_DEBUG_REGISTERS;
    t_ExceptionInfo->ContextRecord->Dr6 = 0;
    return true;
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)