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

C/C++本地代码调试

帖子发起人: dabang   发起时间: 2009-08-17 13:15 下午   回复: 4

Print Search
帖子排序:    
   2009-08-17, 13:15 下午
dabang 离线,最后访问时间: 2009/8/18 21:20:43 dabang

发帖数前500位
注册: 2009-08-17
发 贴: 3
请教大家个问题
Reply Quote
最近在调试一个界面程序时发现,程序退出后,进程仍然存在。用windbg附加到该进程后,发现所有现有的线程的堆栈的最高层都是KiFastSystemCallRet,这个函数不是线程退出时的函数么?为什么执行到这个函数后,进程会不退出呢?
BTW:如果对于那些关闭了界面(窗口之类的全关闭了),但是进程仍然存在的原因是什么啊?

提前感谢大家的回复。
IP 地址: 已记录   报告
   2009-08-17, 21:37 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 请教大家个问题
Reply Quote
当一个线程调用系统服务而进入到内核态执行时,用户态的程序指针所指向的就是KiFastSystemCallRet,因为从用户态的角度来看,一回到用户态,执行的就是个地方。

所以楼主描述的情况是比较典型的挂在内核态,也就是你的线程在调用系统服务时没有返回,如果不返回,那么进程就不能退出,而且这样的进程无法杀掉,就是通常所谓的杀不掉的进程。

如果要想知道原因,那么看栈回溯,看调用的那个系统服务,而后要想知道为什么不返回,那么要看内核态了,使用本地内核调试、或者看内核转储。

IP 地址: 已记录   报告
   2009-08-18, 21:27 下午
dabang 离线,最后访问时间: 2009/8/18 21:20:43 dabang

发帖数前500位
注册: 2009-08-17
发 贴: 3
Re: 请教大家个问题
Reply Quote
感谢张老师的答复。
从调用堆栈上看没有调用系统服务啊,而且该进程可以被procexp杀死,好像也可以用windows自带的任务管理器来杀掉。

IP 地址: 已记录   报告
   2009-08-18, 21:51 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 请教大家个问题
Reply Quote
不客气,不妨将栈回溯贴上来看一下。
IP 地址: 已记录   报告
   2009-08-19, 14:10 下午
dabang 离线,最后访问时间: 2009/8/18 21:20:43 dabang

发帖数前500位
注册: 2009-08-17
发 贴: 3
Re: 请教大家个问题
Reply Quote
张老师:
下面是使用!analyze -v分析的该dump文件:
==============================================
FAULTING_IP:
+2d3952f0280df74
00000000 ?? ???

EXCEPTION_RECORD: ffffffff -- (.exr 0xffffffffffffffff)
ExceptionAddress: 00000000
ExceptionCode: 80000003 (Break instruction exception)
ExceptionFlags: 00000000
NumberParameters: 0

FAULTING_THREAD: 00001244

DEFAULT_BUCKET_ID: HEAP_CORRUPTION

PROCESS_NAME: SoftDA.exe

FAULTING_MODULE: 7c930000 ntdll

DEBUG_FLR_IMAGE_TIMESTAMP: 0

ERROR_CODE: (NTSTATUS) 0x80000003 - { }

EXCEPTION_CODE: (HRESULT) 0x80000003 (2147483651) -

ADDITIONAL_DEBUG_TEXT:
Use '!findthebuild' command to search for the target build information.
If the build information is available, run '!findthebuild -s ; .reload' to set symbol path and load symbols. ; Enable Pageheap/AutoVerifer

PRIMARY_PROBLEM_CLASS: HEAP_CORRUPTION

BUGCHECK_STR: APPLICATION_FAULT_HEAP_CORRUPTION_WRONG_SYMBOLS

LAST_CONTROL_TRANSFER: from 7c96d281 to 7c9585ec

STACK_TEXT:
WARNING: Stack unwind information not available. Following frames may be wrong.
0179f844 7c96d281 0000028c 00000004 7c88b7c0 ntdll!KiFastSystemCallRet
0179f864 7c822372 7c88b7c0 04e00000 05573ad8 ntdll!RtlLockHeap+0x25c
0179fa98 04e5ae77 04d976f4 04e53927 00000001 kernel32!SetEvent+0x61
0179fae0 04e53b41 00000000 00000000 00000001 YLUSBTEL!YL_DeviceIoControl+0x4d087
0179fb08 04e4feae 04e00000 00000000 00000000 YLUSBTEL!YL_DeviceIoControl+0x45d51
0179fb48 04e4ff18 04e00000 7c94a352 04e00000 YLUSBTEL!YL_DeviceIoControl+0x420be
0179fb70 7c969dee 04e4fefb 04e00000 00000000 YLUSBTEL!YL_DeviceIoControl+0x42128
0179fc84 7c82b1bb 04370000 0179fdb0 0179fea0 ntdll!RtlOpenCurrentUser+0x168
0179fc98 774d1d0f 04370000 0179fec4 774d1d23 kernel32!FreeLibrary+0x1a
0179fca4 774d1d23 0179fdbc 00000000 775d65b0 ole32!CreateErrorInfo+0x11d0
0179fec4 774fb97d ffffffff 0004fe60 00072a94 ole32!CreateErrorInfo+0x11e4
0179fed4 7750249c ffffffff 00000000 008fea6f ole32!CoFreeUnusedLibrariesEx+0x2e
0179fee0 008fea6f 00072a94 008fea8d 00000000 ole32!CoFreeUnusedLibraries+0x9
00000000 00000000 00000000 00000000 00000000 SoftDA+0x4fea6f


SYMBOL_NAME: heap_corruption!heap_corruption

FOLLOWUP_NAME: MachineOwner

MODULE_NAME: heap_corruption

IMAGE_NAME: heap_corruption

STACK_COMMAND: .cxr 00000000 ; kb ; ~0s; .ecxr ; kb

FAILURE_BUCKET_ID: HEAP_CORRUPTION_80000003_heap_corruption!heap_corruption

BUCKET_ID: APPLICATION_FAULT_HEAP_CORRUPTION_WRONG_SYMBOLS_heap_corruption!heap_corruption

WATSON_STAGEONE_URL: http://watson.microsoft.com/StageOne/SoftDA_exe/1_2_5_3/4a80d148/unknown/0_0_0_0/bbbbbbb4/80000003/00000000.htm?Retriage=1

Followup: MachineOwner

=================================================
看样子是堆分配错误,但是看不到哪里有问题
IP 地址: 已记录   报告
高端调试 » 软件调试 » C/C++本地代码调试 » Re: 请教大家个问题

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