moris351
驱动牛犊
驱动牛犊
  • 注册日期2004-01-08
  • 最后登录2005-08-21
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2181回复:19

救命:Softice 如何捕获bugcheck(蓝屏)

楼主#
更多 发布于:2004-02-24 23:51
我急着交差:

我想请问一下,我的驱动程序是一个文件系统的过滤器。可是他经常出问题,就是蓝屏死机,也不是每次都出问题,所以我很难跟踪,请问几位老大,Softice 如何捕获bugcheck(蓝屏)。  
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-02-25 08:47
顶,我也是遇到了同样的问题,我用SOFTICE加载我驱动程序检查版本的符号文件(.nms文件,我的驱动是用DS写的),打开SOFTICE的FAULTS功能,当出现异常的时候SOFTICE能弹出来,但显示的错误代码很奇怪,根本看不懂,WC框里显示的也根本不是我驱动的源代码,而是一堆汇编代码,我想问的是,怎么定位到我驱动源代码里
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
Kerry80
驱动牛犊
驱动牛犊
  • 注册日期2002-11-13
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分54分
  • 威望36点
  • 贡献值0点
  • 好评度5点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-02-25 11:05
moris351
驱动牛犊
驱动牛犊
  • 注册日期2004-01-08
  • 最后登录2005-08-21
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-02-25 11:07
我set faults on 为什么不能截获蓝屏错那?我用的是xp+sp1
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-02-25 19:17
怎么没人回答啊??
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
seaquester
驱动大牛
驱动大牛
  • 注册日期2002-05-22
  • 最后登录2016-06-16
  • 粉丝0
  • 关注0
  • 积分500分
  • 威望115点
  • 贡献值0点
  • 好评度107点
  • 原创分0分
  • 专家分52分
5楼#
发布于:2004-02-25 19:47
怎么没人回答啊??


一般,当SoftICE弹出的时候,已经在 KeBugCheck 中,没有办法调试引起蓝屏的代码。
一般蓝屏的调试方法是:
1. 查看蓝屏信息,确定出错代码的大致位置,在那里设置断点,再跟踪调试。
2. 有时候,根据蓝屏信息不足以定位出错代码位置,这时可以用WinDBG或SoftICE调试崩溃堆。
八风舞遥翩,九野弄清音。 鸣高常向月,善舞不迎人。
moris351
驱动牛犊
驱动牛犊
  • 注册日期2004-01-08
  • 最后登录2005-08-21
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-02-25 19:52
是啊,诸位高手都在忙什么,能不能抽出一点时间帮我解决一下。
libin2309:
我现在的问题和你不一样,我的驱动中某些faults 是可以捕获的。但有些就不能捕获,直接重起或蓝屏。我在能捕获时时可以切换到代码的。不知你的为什么不能。
moris351
驱动牛犊
驱动牛犊
  • 注册日期2004-01-08
  • 最后登录2005-08-21
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-02-25 19:57
[quote]怎么没人回答啊??


一般,当SoftICE弹出的时候,已经在 KeBugCheck 中,没有办法调试引起蓝屏的代码。
一般蓝屏的调试方法是:
1. 查看蓝屏信息,确定出错代码的大致位置,在那里设置断点,再跟踪调试。
2. 有时候,根据蓝屏信息不足以定位出错代码位置,这时可以用WinDBG或SoftICE调试崩溃堆。 [/quote]

请问有没有方法在蓝屏时softice先捕到,然后跳出,不重起。我听说可以用GENINT,不知怎么用。
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-02-25 20:01
我的都能捕获,但看起来就象是天书,根本看不懂。
命令窗口显示的信息和蓝屏显示的错误代码,参数信息看起来一点关系也没有。
代码窗口显示的都是汇编代码,也是没头绪。


我是想用WINDBG来分析.dmp文件,也下载了win2000 系统符号文件,还有sp4包的系统符号文件,都装在了一个目录里,在WINDBG里设置了符号文件目录,源文件目录,映象文件路径,但每次打开。dmp文件都显示我的设置不对,以前我发帖子问了这个问题,changjt给我做了详细的回答,我也照它说的做了,但还是不成功,我真的是没辙了。。。。。
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
9楼#
发布于:2004-02-26 09:44
写个内核例程,拦截KeBugcheck,KeBugcheckEx,把相关信息导出到指定文件。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-02-26 11:37
写个内核例程,拦截KeBugcheck,KeBugcheckEx,把相关信息导出到指定文件。


那么导出的信息包括哪些东西,蓝屏错误代码,四个参数?还有别的吗?
因为每次蓝屏这些东西我都能看到,从控制面班的事件查看器里也能看到这些东西,我的驱动间接导致蓝屏的,因为每次蓝屏都提示是 ntoskrl.exe这个文件导致的蓝屏,可见是我驱动调用ntoskrnl.exe的服务,导致了蓝屏。

我用SOFTICE能成功拦截到错误,但显示的是ntoskrnl的汇编代码,怎么由这些汇编能定位到我驱动出错的位置?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-02-26 16:12
等待!!!!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
12楼#
发布于:2004-02-26 17:00
把你的汇编代码贴出来看看吧。。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-02-26 17:15
好的!
我得手工记下来!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于: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 的代码。
从这些信息我怎么定位我自己的驱动代码出错的位置?
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-02-27 09:33
顶!

wowocock 来了吗?
 
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
16楼#
发布于: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.


花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-02-27 10:18
从你的汇编代码什么也看不到,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.


 

其实,我的蓝屏是由我的驱动间接引起的。所以即使用SOFTICE拦截到了异常,显示的也不是我的驱动源程序,而是ntoskrnl这个内核文件的信息。
IoRegisterShutdownNotification的作用是注册一个系统关闭例程,即 shutdown 例程,我的驱动里有这个例程,我的驱动里有这个例程,我在里边释放了所有我获得的资源,在系统关闭的时候这个例程被调用,我跟踪过,我想它的作用和Unload例程一样。但还是蓝屏!
我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
18楼#
发布于:2004-02-27 11:30
把代码贴出来看看。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
libin2309
驱动大牛
驱动大牛
  • 注册日期2002-11-20
  • 最后登录2005-12-29
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于: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);
}

我是一只小小鸟,永远也飞也飞不高,但我永远在飞!
游客

返回顶部