Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

Windows内核调试

帖子发起人: yushang   发起时间: 2009-09-28 15:43 下午   回复: 5

Print Search
帖子排序:    
   2009-09-28, 15:43 下午
yushang 离线,最后访问时间: 2010/2/23 20:01:13 yushang

发帖数前50位
注册: 2009-08-10
发 贴: 27
系统挂死
Reply Quote
参考张老师DPC挂死的文章,我机器上的!pcr输出,请高手帮忙分析分析:
DpcQueue:
0x8055b020 0x804dd2cd [Normal] nt!KiTimerExpiration
0x81a70bb8 0xf9b34043 [Normal] i8042prt!I8042MouseIsrDpc
0x81a70af0 0xf9b2e164 [Normal] i8042prt!I8042ErrorLogDpc
0x81ada01c 0xf98e05a6 [Normal] NDIS!ndisMDpc

DPC队列每次都有所不同,但一定都有ndisMDpc,这是不是说明和NIDS有关?应该再怎么向下分析呢?
kvn
# ChildEBP RetAddr Args to Child
00 f9eb3c94 804e4324 00000001 00000002 00000030 nt!RtlpBreakWithStatusInstruction (FPO: [1,0,0])
01 f9eb3c94 804e73c4 00000001 00000002 00000030 nt!KeUpdateSystemTime+0x165 (FPO
: [0,2] TrapFrame @ f9eb3ca8)
02 f9eb3d2c 804e73f7 805636e0 805636d8 804e65fc nt!ExpScanGeneralLookasideList+0
x36 (FPO: [2,1,0])
03 f9eb3d38 804e65fc 00000000 81bb7308 00000000 nt!ExAdjustLookasideDepth+0x32 (FPO: [0,0,0])
04 f9eb3dac 8057beff 00000000 00000000 00000000 nt!KeBalanceSetManager+0x88(FPO
: [1,24,0])
05 f9eb3ddc 804f98ea 804e657a 00000000 00000000 nt!PspSystemThreadStartup+0x34 (
FPO: [Non-Fpo])
06 00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16
为什么我的堆栈回溯看不出来是在哪个DPC中呢
IP 地址: 已记录   报告
   2009-09-29, 21:08 下午
yushang 离线,最后访问时间: 2010/2/23 20:01:13 yushang

发帖数前50位
注册: 2009-08-10
发 贴: 27
Re: 系统挂死
Reply Quote
另外中断的线程(KeBalanceSetManager)级别是16
IP 地址: 已记录   报告
   2009-09-30, 09:44 上午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 系统挂死
Reply Quote
如何重现这样的问题?在什么情况下容易发生?
IP 地址: 已记录   报告
   2009-09-30, 14:09 下午
yushang 离线,最后访问时间: 2010/2/23 20:01:13 yushang

发帖数前50位
注册: 2009-08-10
发 贴: 27
Re: 系统挂死
Reply Quote
这是在Virtual PC 上运行一个使用TDI库的驱动时遇到的。按照您的DPC挂死的文章,我的堆栈回溯也应该到某个DPC中,但是奇怪的是居然是一个系统线程。出现挂死具有一定的随机性,但是90%的情况下都挂死
IP 地址: 已记录   报告
   2009-09-30, 20:33 下午
yushang 离线,最后访问时间: 2010/2/23 20:01:13 yushang

发帖数前50位
注册: 2009-08-10
发 贴: 27
Re: 系统挂死
Reply Quote
呵呵,经过我亲自调试,找到问题原因了,和大家分享一下:是由于LookAside使用不当造成的:

1,发生挂死后每次陷入调试器发现都中断在nt!ExpScanGeneralLookasideList函数中,因此怀疑这个函数死循环了,检查函数,发现下面这段代码决定函数的返回:
nt!ExpScanGeneralLookasideList+0x85:
804e73d7 66895ed8 mov word ptr [esi-28h],bx
804e73db 8b36 mov esi,dword ptr [esi]
804e73dd 3b7508 cmp esi,dword ptr [ebp+8]
804e73e0 75c7 jne nt!ExpScanGeneralLookasideList+0x1b (804e73a9)
在804e73e0处下一个断点,发现每次esi都保持不变,并且都不等于ebp+8,因此jne总是跳转到前面代码而不是后面的退出代码。另外这个函数虽然不是DPC队列,但是在进入时会将IRQL提升到DPC级别,这解释了为什么界面不响应

2,在查找WDK中关于ExInitializeNPagedLookasideList函数的说明,有这么一句:
Drivers must always use explicitly free any lookaside lists they create before unloading. To do otherwise is a serious programming error
我的驱动没有按照这个来做,暂时把所有的LookAside改为直接Pool分配后问题消失
IP 地址: 已记录   报告
   2009-10-08, 22:25 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 系统挂死
Reply Quote
多谢分享,解铃还须系铃人:-)
IP 地址: 已记录   报告
高端调试 » 软件调试 » Windows内核调试 » Re: 系统挂死

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.