
异常
文章平均质量分 74
My classmates
QQ349561280
展开
-
1.异常记录
我们主要围绕这个主线展开:异常记录异常分发异常处理异常的分类CPU产生的异常软件模拟产生的常这种属于CPU产生的异常int main(){ int a = 10; int b = 0; int val = a / b;}这种属于软件模拟的异常void a(){ throw 1;}int main(){ a();}CPU异常产生过程CPU...原创 2018-10-29 09:47:16 · 528 阅读 · 0 评论 -
2.内核异常处理流程
用户层异常与内核层异常异常可以发生在用户空间,也可以发生在内核空间。无论是CPU异常还是模拟异常,是用户层异常还是内核异常,都要通过 KiDispatchException函数进行分发,这个函数比较复杂。VOID KiDispatchException( ExceptionRecord, ExceptionFrame, TrapFrame, PreviousMode, First...原创 2018-10-29 16:18:41 · 1509 阅读 · 0 评论 -
3.用户异常的分发
异常如果发生在内核层,处理起来比较简单,因为异常处理函数也在0环,不用切换堆栈,但是如果异常发生在3环,就意味着必须要切换堆栈,回到3环执行处理函数。切换堆栈的处理方式与用户APC的执行过程几乎是一样的,唯一的区别就是执行用户APC时返回3环后执行的函数是KiUserApcDispatcher,而异常处理时返回3环后执行的函数是KiUserExceptionDispatcher.所以,理解用户...原创 2018-10-29 21:36:17 · 770 阅读 · 0 评论 -
6.编译器拓展SEH
//1.挂入链表相当于这部分//fs[0]-> Exception _asm { mov eax, fs:[0] mov temp,eax lea ecx,Exception mov fs:[0],ecx } //为SEH成员赋值 Exception.Next = (_EXCEPTION*)temp; Exception.Handler = (DWORD)&am...原创 2018-10-31 20:26:45 · 552 阅读 · 0 评论 -
4.VEH(向量化异常处理)
当用户异常产生后,内核函数KiDispatchException并不是像处理内核异常那样在0环直接进行处理,而是修正3环EIP为KiUserExceptionDispatcher函数后就结束了。这样,当线程再次回到3环时,将会从KiUserExceptionDispatcher函数开始执行。(ntdll.dll) KiUserExceptionDispatcher函数分析调用 RtIDis...原创 2018-10-30 12:53:31 · 7010 阅读 · 0 评论 -
7.未处理异常
当异常发生的处理流程:CPU检测到异常查IDT表执行中断处理程序CommonDispatchExceptior(CxxThrowException RaiseException RtIRaiseException() NtRaiseException KiRaiseException)KiDispatchExceptionKiUserExceptionDispatcherRtIDispa...原创 2018-11-01 09:34:32 · 1231 阅读 · 0 评论 -
5.SEH(结构化异常处理)
当用户异常产生后,内核函数KiDispatchException并不是像处理内核异常那样在0环直接进行处理,而是修正3环EIP为KiUserExceptionDispatcher函数后就结束了。这样,当线程再次回到3环时,将会从KiUserExceptionDispatcher函数开始执行。KiUserExceptionDispatcher会调用RtIDispatchException函数来查...原创 2018-10-30 20:08:27 · 1262 阅读 · 0 评论