首页
社区
课程
招聘
[原创][分享]异常处理机制-用户异常的分发与处理学习笔记
发表于: 2020-8-26 20:22 4450

[原创][分享]异常处理机制-用户异常的分发与处理学习笔记

2020-8-26 20:22
4450

一、用户异常分发

异常记录记录之后就是分发异常

最终会调用KiDispatchException来分发异常:



接上图


用户异常分发总结

异常如果发生在内核层,处理起来比较简单,因为异常处理函数也在0环,

        不用切换堆栈,但是如果异常发生在3环,就意味着必须要切换堆栈,回到3环执行处理函数。

切换堆栈的处理方式与用户APC的执行过程几乎是一样的,惟一的区别就是

    执行用户APC时返回3环后执行的函数是KiUserApcDispatcher,

         而异常处理时返回3环后执行的函数是KiUserExceptionDispatcher。


二、用户异常处理之VEH

VEH是一个全局链表,里面存储了处理异常的函数


(Ntdll.dll)KiUserExceptionDispatcher 函数总结

1.调用ntdll的库函数RtlDispatchException查找并执行异常处理函数(内核异常处理的RtlDispatchException是ntoskrnl.exe模块的库函数,两个函数名一样,但是是不同库的库函数)

2.如果RtlDispatchException成功处理异常,返回真,调用ZwContinue再次进入0环,修正恢复3环EIP。

3.如果RtlDispatchException未处理异常,返回假,调用ZwRaiseException进行第二轮异常分发


VEH异常处理流程总结

1.CPU捕获到异常信息

2.通过KiDispatchException分发异常(EIP=KiUserExceptionDispatcher)

3.KiUserExceptionDispatcher调用RtlDispatchException


[峰会]看雪.第八届安全开发者峰会10月23日上海龙之梦大酒店举办!

最后于 2020-11-29 12:50 被三一米田编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//