阅读:2183回复:19
救命:Softice 如何捕获bugcheck(蓝屏)
我急着交差:
我想请问一下,我的驱动程序是一个文件系统的过滤器。可是他经常出问题,就是蓝屏死机,也不是每次都出问题,所以我很难跟踪,请问几位老大,Softice 如何捕获bugcheck(蓝屏)。 |
|
沙发#
发布于:2004-02-27 13:48
把代码贴出来看看。 我贴出系统关闭例程: //////////////////////////////////////////////////////////////////////// ///系统关闭例程 //////////////////////////////////////////////////////////////////////// NTSTATUS JiemaDevice::Shutdown(KIrp I) { if(m_pEvent!=NULL) { t<<"删除事件对象\n"; delete m_pEvent; m_pEvent=NULL; } if(Me!=NULL) { t<<"删除内存对象Me\n"; delete Me; Me=NULL; } if(Buf!=NULL) { t<<"删除内存对象Buf\n"; delete Buf; Buf=NULL; } ReleaseResources(*m_RegPath); delete m_RegPath; return I.Complete(STATUS_SUCCESS); } |
|
|
板凳#
发布于:2004-02-27 11:30
把代码贴出来看看。
|
|
|
地板#
发布于:2004-02-27 10:18
从你的汇编代码什么也看不到,NTOSKRNL是不会有什么问题的,不过既然关机的时候出现问题,还是可以想办法的,就是在关机前先UNLOAD你的驱动,毕竟不关机就没问题的啊,嘿嘿 其实,我的蓝屏是由我的驱动间接引起的。所以即使用SOFTICE拦截到了异常,显示的也不是我的驱动源程序,而是ntoskrnl这个内核文件的信息。 IoRegisterShutdownNotification的作用是注册一个系统关闭例程,即 shutdown 例程,我的驱动里有这个例程,我的驱动里有这个例程,我在里边释放了所有我获得的资源,在系统关闭的时候这个例程被调用,我跟踪过,我想它的作用和Unload例程一样。但还是蓝屏! |
|
|
地下室#
发布于:2004-02-27 10:04
从你的汇编代码什么也看不到,NTOSKRNL是不会有什么问题的,不过既然关机的时候出现问题,还是可以想办法的,就是在关机前先UNLOAD你的驱动,毕竟不关机就没问题的啊,嘿嘿
用IoRegisterShutdownNotification UNLOAD你的驱动 IoRegisterShutdownNotification registers a driver-supplied DispatchShutdown routine to be called before system shutdown; the driver gains control before the system is fully shut down. |
|
|
5楼#
发布于:2004-02-27 09:33
顶!
wowocock 来了吗? |
|
|
6楼#
发布于:2004-02-26 21:00
把你的汇编代码贴出来看看吧。。 刚才运行了驱动程序,关机的时候SOFTICE弹出来显示以下信息: Break due to Page Fault (0Eh) Fault=0000 MSR LastExceptionFromIp=00000000 MSR lastExceptionToIp=00000000 显示的汇编代码是: ntoskrnl!Ntclose+00CF 0008:8044FA7D CMP DWORD PTR[ECX],00 显然这是内核文件ntoskrnl.exe 的代码。 从这些信息我怎么定位我自己的驱动代码出错的位置? |
|
|
7楼#
发布于:2004-02-26 17:15
好的!
我得手工记下来! |
|
|
8楼#
发布于:2004-02-26 17:00
把你的汇编代码贴出来看看吧。。
|
|
|
9楼#
发布于:2004-02-26 16:12
等待!!!!
|
|
|
10楼#
发布于:2004-02-26 11:37
写个内核例程,拦截KeBugcheck,KeBugcheckEx,把相关信息导出到指定文件。 那么导出的信息包括哪些东西,蓝屏错误代码,四个参数?还有别的吗? 因为每次蓝屏这些东西我都能看到,从控制面班的事件查看器里也能看到这些东西,我的驱动间接导致蓝屏的,因为每次蓝屏都提示是 ntoskrl.exe这个文件导致的蓝屏,可见是我驱动调用ntoskrnl.exe的服务,导致了蓝屏。 我用SOFTICE能成功拦截到错误,但显示的是ntoskrnl的汇编代码,怎么由这些汇编能定位到我驱动出错的位置? |
|
|
11楼#
发布于:2004-02-26 09:44
写个内核例程,拦截KeBugcheck,KeBugcheckEx,把相关信息导出到指定文件。
|
|
|
12楼#
发布于:2004-02-25 20:01
我的都能捕获,但看起来就象是天书,根本看不懂。
命令窗口显示的信息和蓝屏显示的错误代码,参数信息看起来一点关系也没有。 代码窗口显示的都是汇编代码,也是没头绪。 我是想用WINDBG来分析.dmp文件,也下载了win2000 系统符号文件,还有sp4包的系统符号文件,都装在了一个目录里,在WINDBG里设置了符号文件目录,源文件目录,映象文件路径,但每次打开。dmp文件都显示我的设置不对,以前我发帖子问了这个问题,changjt给我做了详细的回答,我也照它说的做了,但还是不成功,我真的是没辙了。。。。。 |
|
|
13楼#
发布于:2004-02-25 19:57
[quote]怎么没人回答啊?? 一般,当SoftICE弹出的时候,已经在 KeBugCheck 中,没有办法调试引起蓝屏的代码。 一般蓝屏的调试方法是: 1. 查看蓝屏信息,确定出错代码的大致位置,在那里设置断点,再跟踪调试。 2. 有时候,根据蓝屏信息不足以定位出错代码位置,这时可以用WinDBG或SoftICE调试崩溃堆。 [/quote] 请问有没有方法在蓝屏时softice先捕到,然后跳出,不重起。我听说可以用GENINT,不知怎么用。 |
|
14楼#
发布于:2004-02-25 19:52
是啊,诸位高手都在忙什么,能不能抽出一点时间帮我解决一下。
libin2309: 我现在的问题和你不一样,我的驱动中某些faults 是可以捕获的。但有些就不能捕获,直接重起或蓝屏。我在能捕获时时可以切换到代码的。不知你的为什么不能。 |
|
15楼#
发布于:2004-02-25 19:47
怎么没人回答啊?? 一般,当SoftICE弹出的时候,已经在 KeBugCheck 中,没有办法调试引起蓝屏的代码。 一般蓝屏的调试方法是: 1. 查看蓝屏信息,确定出错代码的大致位置,在那里设置断点,再跟踪调试。 2. 有时候,根据蓝屏信息不足以定位出错代码位置,这时可以用WinDBG或SoftICE调试崩溃堆。 |
|
|
16楼#
发布于:2004-02-25 19:17
怎么没人回答啊??
|
|
|
17楼#
发布于:2004-02-25 11:07
我set faults on 为什么不能截获蓝屏错那?我用的是xp+sp1
|
|
18楼#
发布于:2004-02-25 11:05
顶
|
|
19楼#
发布于:2004-02-25 08:47
顶,我也是遇到了同样的问题,我用SOFTICE加载我驱动程序检查版本的符号文件(.nms文件,我的驱动是用DS写的),打开SOFTICE的FAULTS功能,当出现异常的时候SOFTICE能弹出来,但显示的错误代码很奇怪,根本看不懂,WC框里显示的也根本不是我驱动的源代码,而是一堆汇编代码,我想问的是,怎么定位到我驱动源代码里
|
|
|