获取内核当前执行模块和当前发生异常地址和线程异常Handler调用步骤

Posted 狂客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了获取内核当前执行模块和当前发生异常地址和线程异常Handler调用步骤相关的知识,希望对你有一定的参考价值。

循环每个内核模块 统计模块大小 判断触发异常的地址属于那个模块。来确定模块

获取发生异常地址
nt!_EXCEPTION_RECORD
+0x000 ExceptionCode : -2139160568
+0x004 ExceptionFlags : 0x807fa938
+0x008 ExceptionRecord : 0x00010000 _EXCEPTION_RECORD
+0x00c ExceptionAddress : 0x807fa340
+0x010 NumberParameters : 0
+0x014 ExceptionInformation : [15] 0x807fa8e4
ExceptionFlags 的地址 +4 就是异常发生地址

call nt!RtlIsValidHandler (840c996a) 这里判断handler是否有效
kd> p
nt!RtlDispatchException+0x76:
840c985c 84c0 test al,al
kd> p
nt!RtlDispatchException+0x78:
840c985e 0f84f0000000 je nt!RtlDispatchException+0x16e (840c9954) 无效就会跳转。有效就不会。应该就是这里报出了异常

以上是关于获取内核当前执行模块和当前发生异常地址和线程异常Handler调用步骤的主要内容,如果未能解决你的问题,请参考以下文章

Python 模块 socketserver 以及 线程进程

中断和异常

Java内存区域的划分和异常

Java内存区域的划分和异常

JVM-Java内存区域与内存溢出异常

JVM-Java内存区域与内存溢出异常