53.处理cpu的异常

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

上一个内容:52.通过劫持主线程获取目标断点寄存器(调试寄存器)

以 52.通过劫持主线程获取目标断点寄存器(调试寄存器) 它的代码为基础进行修改

处理器异常码说明:

https://learn.microsoft.com/zh-cn/windows-hardware/drivers/debugger/specific-exceptions

htdHook2.cpp文件做出了修改:

LONG _stdcall PvectoredExceptionHandler(PEXCEPTION_POINTERS val) {

    // 处理器异常编码,用 val->ExceptionRecord->ExceptionCode; 这个获取
    /**
        异常码说明:
          https://learn.microsoft.com/zh-cn/windows-hardware/drivers/debugger/specific-exceptions
    */
    if (val->ExceptionRecord->ExceptionCode == STATUS_BREAKPOINT) {
        /**
            call指令执行时会让eip指向下一条指令的位置,
            这里减去0x5是让他回到call的位置,也就是得到从哪来的
        */
        unsigned _eip = val->ContextRecord->Eip;
        PHOOKPOINT point = htdHook2Ptr->Points.FindPoint((LPVOID)_eip);
        if (point) {
            if (point->GetHookBack2()(val->ContextRecord)) {
                // 继续执行原有代码
                val->ContextRecord->Eip = (unsigned)point->CodeFix;
            }
            else {
                // 调转到指定位置执行
                val->ContextRecord->Eip = (unsigned)point->AddressRet;
            }
            // 拦截异常不让当前异常往后传递
            return EXCEPTION_CONTINUE_EXECUTION;
        }
        // 拦截异常让当前异常往后传递(表示当前异常不是我们要拦截的异常)
        else return EXCEPTION_CONTINUE_SEARCH;
    }


    
    if (val->ExceptionRecord->ExceptionCode == STATUS_SINGLE_STEP) {

        AfxMessageBox(L"TXT");
        // 如果没有这一句它会无限弹框,原因是没有好好的处理异常导致的
        val->ContextRecord->Dr7 = 0b00001010100;
        // 处理器错误别人处理不了,这里只能返回 EXCEPTION_CONTINUE_EXECUTION,返回别的也行但是没有人能处理
        return EXCEPTION_CONTINUE_EXECUTION;
    }
}

相关推荐

  1. 53.处理cpu异常

    2024-07-13 02:38:02       22 阅读
  2. Go异常处理

    2024-07-13 02:38:02       38 阅读
  3. Python异常处理

    2024-07-13 02:38:02       36 阅读
  4. Python 中异常处理

    2024-07-13 02:38:02       66 阅读
  5. Python中异常处理

    2024-07-13 02:38:02       44 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 02:38:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 02:38:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 02:38:02       57 阅读
  4. Python语言-面向对象

    2024-07-13 02:38:02       68 阅读

热门阅读

  1. 如何在Linux系统下安装Anaconda

    2024-07-13 02:38:02       21 阅读
  2. LeetCode 1351, 1, 208

    2024-07-13 02:38:02       22 阅读
  3. 【C++精华铺】13.STL stack 和 STL queue 模拟实现

    2024-07-13 02:38:02       20 阅读
  4. MySQL8之mysql-community-server的作用

    2024-07-13 02:38:02       18 阅读