异常分发(用户异常)

文章目录

    • 内容回顾:
    • 用户异常的处理流程:
    • 总结

内容回顾:

异常如果发送在内核层,处理起来比较简单,因为异常处理函数也在0环,不用切换堆栈,但是如果异常发生在3环,就意味着必须要切换堆栈,回到3环执行处理函数

切换堆栈的处理方式与用户APC的执行过程几乎是一样的,惟一的区别就是执行用户APC时返回3环后执行的函数是KiUserApcDispatcher,而异常处理时返回3环后执行的函数是KiUserExceprionDispatcher

所以,理解用户APC的执行过程是理解3环异常处理的关键

用户异常的处理流程:

VOID KiDispatchException(ExceptionRecord,ExceptionFrame,TrapFrame,PreviousMode,FirstChance)
1._KeContextFromKframes 将Trap_frame备份到context为返回3环做准备
在这里插入图片描述

第一步:不管用户异常还是内核异常,先把Trap_frame(当前线程3环进入0环时,那些寄存区环境,也就是eip运行地方那些值)备份到context里(为返回3环做准备)

这个函数两种异常(用户异常和内核异常)的分发都归它管,所以就存在异常处理是否需要回到三环,内核异常不用回去(内核异常处理函数在0环),用户异常需要回去(用户层处理函数在3环0)。
在这里插入图片描述

2.第二步:判断先前模式,0是内核调用,1是用户调用,用户层异常呢,紧接着就是跳转:0x4258C3

在这里插入图片描述

第三步:第一次执行时,肯定是第一次调用(这个函数不止执行一次),所以接着往下:

这里判断是否启用了内核调试器,如果有内核调试器的话,那么这个值是非零的,如果有内核调试器的话,那它就调用,把异常信息先发送给异常调试器(那么我们此处假设没有内核异常调试器,或者内核异常调试器没有处理)
在这里插入图片描述

第四步:用来判断3环调试器(3环调试器如果不存在或者3环调试器没有处理的话,那么接着往下走)

第五步:为回到三环做准备
在这里插入图片描述

一开始就把Trap_frame备份到context里,然后这里接下来就可以随心所欲地改
在这里插入图片描述
在这里插入图片描述

最关键的修改,把KeUserExceptionDispatcher里面的值覆盖到Eip,它并没有在当前位置直接返回三环。而是让当前程序结束执行
在这里插入图片描述

总结

VOID KiDispatchException(ExceptionRecord,ExceptionFrame,TrapFrame,PreviousMode,FirstChance)

  1. _KeContextFromKframes 将Trap_frame备份到context为返回3环做准备
  2. 判断先前模式 0是内核调用,1是用户调用
  3. .是否是第一次机会
  4. 是否有内核调试器
  5. 发送给3环调试
  6. 如果3环调试器没有处理这个异常,修正EIP为KiUserExceptionDispatcher
  7. KiDispatchException函数执行结束:CPU异常与模拟异常返回地点不同
    CPU异常:CPU检测到异常—>查IDT执行处理函数—>CommonDispatchException------>KiDispatchException 通过IRETD返回3环
    模拟异常:CxxThrowException—>RaiseException—>RtlRaiseException---->Nt!NtRaiseException—>Nt!KiRaiseException---->KiDispatchException通过系统调用返回3环
  8. 无论通过哪种方式,但线程再次回到3环,将执行KiUserExceptionDispatcher函数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/64951.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

账号异常分析

看了一篇文章,感觉全篇都是干货。具体参见如何分析账号异常?看这里! 购物、支付、游戏、社交软件帐号被盗的新闻屡见不鲜,危害之大可想而知! 常用的网络帐号,主机帐号被盗可能会造成信息泄露,资金被转走&a…

用户账号异常分析

看了一篇文章,感觉全篇都是干货 学习ing 转载自https://baijiahao.baidu.com/s?id1570344881808397&wfrspider&forpc 购物、支付、游戏、社交软件帐号被盗的新闻屡见不鲜,危害之大可想而知! 常用的网络帐号,主机帐号被盗可能会造…

Google邮箱账号登陆存在异常活动怎么办?

注册或是其他QU道弄好谷歌账号之后,就可以使用谷歌账号登录了。登陆使用一段时间,过段时间就会提醒你“尝试登录的账户有异常活动,”这时候输入你绑定的号码不管用,然后换号码,国内手机号都不管用。 谷歌账号登陆异常此…

ChatGPT 对手 Claude2 发布新版本,代码、GRE 成绩超越 GPT-4,使用体验如何?

Claude 2的更新。Claude作为 ChatGPT的竞争对手,其版本迭代确实值得关注。 从您的描述来看,Claude 2在语言理解和知识推理方面有所提升,并提供了免费试用和合理定价,这些确实都是重要的升级。 同时,我注意到您提到它被许多网友称为“ChatGPT 最强竞品”,这可能过于主观和绝对化…

GPT-4最强竞争对手Claude 2震撼发布,据说超过GPT-4?

OpenAI 发布了 GPT-4 的 API 和令人兴奋的“最强插件”代码解释器,这无疑给竞争对手们敲响了警钟。而最近,Anthropic 旗下的 Claude 揭开了它的第二代面纱。免费使用Claude 2请加微信wyxyellow 相较于之前的版本,Claude 2 在代码、数学和推理…

GPT-4 最强竞争对手,Claude 杀疯了!

公众号关注 “GitHubDaily” 设为 “星标”,每天带你逛 GitHub! 在今年早些时候,ChatGPT、Bard、Claude 等大语言模型,在 AI 领域呈三权鼎立之势,无人能出其右,被视为是能力表现最为卓越的 3 款 AI 聊天机器…

chatgpt赋能Python-python_conut

Python Count - 用于计数的重要功能 Python是一种广泛使用的高级编程语言,自称为简单、易学、易读和易推广,适合新手和高级程序员使用。在这篇文章中,我们将讨论Python中一个非常重要的功能 - Count(计数)。 什么是P…

chatgpt赋能python:Python中怎么分段?

#Python中怎么分段? ##介绍 Python是一种高级编程语言,它被广泛用于各种任务,包括数据分析、Web开发、人工智能、游戏开发等等。对于Python的初学者来说,其中有一个重要的问题是如何正确地分段。在这篇文章中,我们将…

【案例】Python金融分析-CAPM模型对股票进行分析

前言 在2009年巴菲特给股东们的信中写道: Investors should be skeptical of history-based models. Constructed by a nerdy-sounding priesthood using esoteric terms such as beta, gamma, sigma, and the like, these models tend to look impressive. Too of…

微软 Build 2023:人工智能重新定义软件开发与工作的未来

2023年5月23日,美国华盛顿州西雅图 —— 微软年度开发者大会Build 2023在西雅图开幕,面对当今由AI引领的技术趋势,微软向超过20万名注册参会的开发者集中展示人工智能如何给软件开发的对象、过程和工具带来巨大变革,并重新定义工作…

chatgpt赋能python:Python到底要怎么删干净?

Python 到底要怎么删干净? 介绍 Python 是一门广泛使用的编程语言。由于其简单易学、可扩展和跨平台特性,目前越来越多的程序员和公司开始在其项目中采用 Python。然而,由于初学者较多,可能会遇到 Python 删干净的问题&#xff…

chatgpt赋能python:Python怎么删除库

Python怎么删除库 如果你有一些不再需要的Python库,可能会想要将它们删除以释放硬盘空间或简化项目环境。那么,Python怎么删除库呢? 一级标题:使用pip命令卸载库 Python语言中,有一个常用的工具pip,它是…

chatgpt赋能python:Python彻底删除指南:保障您的数据不被误操作删除

Python彻底删除指南:保障您的数据不被误操作删除 Python是一种简单易学且功能强大的编程语言,因此被广泛应用于各种应用程序的开发和数据分析。然而,当我们在使用Python时,难免会遇到删除数据的情况。 误操作删除数据可谓是一场…

chatgpt赋能python:Python如何删除数据:完整指南

Python如何删除数据:完整指南 如果你是一名Python开发者,你肯定需要删除不必要的数据。删除数据是很重要的,因为它可以帮助你保持你的数据库或文件系统的清洁和可读性。本文将详细介绍Python中删除数据的各种方法,让你轻松地管理…

chatgpt赋能python:Python彻底删除指南:为什么需要彻底删除Python?

Python彻底删除指南:为什么需要彻底删除Python? Python是一种高级编程语言,它广泛用于各种应用程序的开发。但是,对于某些开发者来说,可能需要从他们的计算机中彻底删除Python。这可能是因为他们需要将Python版本更新…

chatgpt赋能python:如何彻底删除Python软件?

如何彻底删除Python软件? Python是一种非常流行的编程语言,经常被用于开发应用程序、网站、数据分析和机器学习等。但是,有时候你可能需要删除Python软件,可能是因为你需要卸载旧版本的Python,或者因为你需要清理磁盘…

chatgpt赋能python:Python如何彻底删除软件

Python如何彻底删除软件 Python是一种非常流行的高级编程语言,可用于构建各种不同类型的软件和网络应用程序。但是,在某些情况下,我们可能需要卸载不再需要的软件,并希望能够从系统中完全删除软件。在本文中,我们将探…

chatgpt赋能python:如何彻底删除Python?

如何彻底删除Python? Python是一种非常流行的编程语言,它被Python开发者,学生和数据科学家广泛使用。但是你可能想要删除它,因为你需要释放空间或者升级到新版本。在本文中,我将向您介绍如何彻底删除Python。 为什么…

chatgpt赋能python:如何彻底删除Python

如何彻底删除Python Python是一种流行的编程语言,但是有时候你可能需要彻底删除它。本文将介绍如何删除Python,包括清理Python相关文件和文件夹,以便你可以完全卸载它。 确认Python版本 在删除Python之前,需要先确认你当前的Py…

chatgpt赋能python:Python彻底删除教程

Python 彻底删除教程 Python作为一门高级编程语言,广泛应用于人工智能、数据科学、网站开发和自动化等领域。然而,随着工程和项目的不断迭代,代码的删除也变得越来越重要。在本教程中,我们将重点介绍如何彻底删除Python代码&…