张帆的windows驱动技术详解 第6章 stringtest
不过似乎光盘中代码在第5章节
原代码似乎是一个一个功能开启的
/*//字符串初始化实验
StringInitTest(); //字符串拷贝实验
StringCopyTest(); //字符串比较实验
StringCompareTest(); //字符串变大写实验
StringToUpperTest(); //字符串与整型相互转化实验
StringToIntegerTest(); //ANSI_STRING字符串与UNICODE_STRING字符串相互转换实验
StringConverTest();*/
我将测试函数一次全部开启在虚拟机XP下调试 NET STOP时候蓝屏WINDBG查看DUMP文件显示是unload函数问题
但是我怀疑是内存问题
不过似乎光盘中代码在第5章节
原代码似乎是一个一个功能开启的
/*//字符串初始化实验
StringInitTest(); //字符串拷贝实验
StringCopyTest(); //字符串比较实验
StringCompareTest(); //字符串变大写实验
StringToUpperTest(); //字符串与整型相互转化实验
StringToIntegerTest(); //ANSI_STRING字符串与UNICODE_STRING字符串相互转换实验
StringConverTest();*/
我将测试函数一次全部开启在虚拟机XP下调试 NET STOP时候蓝屏WINDBG查看DUMP文件显示是unload函数问题
但是我怀疑是内存问题
解决方案 »
- 请教:图片拖拽的实现
- 怎么CListCtrl的某行某列中插入几个项。有人可以指点一下吗?
- 请教一个《WIN编程》中malloc的问题
- 怎样设置IE中的代理服务器(程序运行后自动改),谢谢大家,在线等!
- 如何创建一个动态按钮,为什么我创建的显示不出来那?
- 一个CWinThread的线程类,如何获得窗口句柄并传到线程中去
- 想编写一个类似股市分析的软件,请大虾指教
- ListCtrl控件SetBkColor和SetTextColor的问题?
- 我如何监听一个程序的端口数据(未加密)
- 我没分了,但希望大家能帮我解决一下我问的问题!
- 视频采集
- 请问一下在VS2005里调用存储过程,存储过程的有一个变量是游标,请问这个游标在VC里该传入什么参数呢?
主要是想学习下分析的手段 毕竟以后的自己程序的蓝屏分析更加棘手
这次蓝屏学习到的问题就 WINDBG的分析DUMP文件似乎定位并不准确“帖代码或者WinDbg的!analyze输出来看看吧”
这边不带附件而且代码很长(我也不知道哪里出了问题)
不过CSDN似乎有驱动技术详解的源代码下DUMP文件
kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************PAGE_FAULT_IN_NONPAGED_AREA (50)
Invalid system memory was referenced. This cannot be protected by try-except,
it must be protected by a Probe. Typically the address is just plain bad or it
is pointing at freed memory.
Arguments:
Arg1: f7a101b0, memory referenced.
Arg2: 00000000, value 0 = read operation, 1 = write operation.
Arg3: 805b64b4, If non-zero, the instruction address which referenced the bad memory
address.
Arg4: 00000000, (reserved)Debugging Details:
------------------
Could not read faulting driver nameREAD_ADDRESS: f7a101b0 FAULTING_IP:
nt!ObpCaptureObjectName+c6
805b64b4 f3a5 rep movs dword ptr es:[edi],dword ptr [esi]MM_INTERNAL_CODE: 0CUSTOMER_CRASH_COUNT: 2DEFAULT_BUCKET_ID: DRIVER_FAULTBUGCHECK_STR: 0x50PROCESS_NAME: SystemLAST_CONTROL_TRANSFER: from 805b6641 to 805b64b4STACK_TEXT:
f7922b94 805b6641 e100d600 f7922d4c f7922c18 nt!ObpCaptureObjectName+0xc6
f7922be8 805b0ab6 865eb0f0 e100d600 e100d600 nt!ObpCaptureObjectCreateInformation+0x135
f7922c2c 805ba669 f7922d24 865eb0f0 e100d600 nt!ObOpenObjectByName+0x62
f7922c84 8053d808 f7922d44 00010000 f7922d24 nt!NtOpenSymbolicLinkObject+0x73
f7922c84 804fec71 f7922d44 00010000 f7922d24 nt!KiFastCallEntry+0xf8
f7922d08 8056917c f7922d44 00010000 f7922d24 nt!ZwOpenSymbolicLinkObject+0x11
f7922d3c f7a0f6d6 f7922d4c 86517390 001a0018 nt!IoDeleteSymbolicLink+0x3c
WARNING: Stack unwind information not available. Following frames may be wrong.
f7922d58 80576633 862cda18 f520fb84 8055b1fc StringTest+0x6d6
f7922d74 80534dd0 f520fb84 00000000 865b5640 nt!IopLoadUnloadDriver+0x19
f7922dac 805c5a28 f520fb84 00000000 00000000 nt!ExpWorkerThread+0x100
f7922ddc 80541fa2 80534cd0 00000001 00000000 nt!PspSystemThreadStartup+0x34
00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16
STACK_COMMAND: kbFOLLOWUP_IP:
StringTest+6d6
f7a0f6d6 ?? ???SYMBOL_STACK_INDEX: 7SYMBOL_NAME: StringTest+6d6FOLLOWUP_NAME: MachineOwnerMODULE_NAME: StringTestIMAGE_NAME: StringTest.sysDEBUG_FLR_IMAGE_TIMESTAMP: 4b0935ebFAILURE_BUCKET_ID: 0x50_StringTest+6d6BUCKET_ID: 0x50_StringTest+6d6Followup: MachineOwner
---------StringTest+0x6d6就是UNLOAD函数 不过应该不是这里确实是Tr0j4n所说的字符串测试函数的区段问题
能否在进一步定位? 谢谢
简单的说 我是从程序与工具的来的信息进行判断 而不需要老请教人
毕竟授人以鱼不如授人以渔
我需要从这个例子得到调试和判断的知识
而不是每次都上来把例子放到这里 得知哪里错误 我需要的是如何判断是这个错误你没有叫我使用WINDBG 那个反问不是针对你
再次贴下 调试信息
kd> !analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************PAGE_FAULT_IN_NONPAGED_AREA (50)
Invalid system memory was referenced. This cannot be protected by try-except,
it must be protected by a Probe. Typically the address is just plain bad or it
is pointing at freed memory.
Arguments:
Arg1: f79f8180, memory referenced.
Arg2: 00000000, value 0 = read operation, 1 = write operation.
Arg3: 805b64b4, If non-zero, the instruction address which referenced the bad memory
address.
Arg4: 00000000, (reserved)Debugging Details:
------------------
Could not read faulting driver nameREAD_ADDRESS: f79f8180 FAULTING_IP:
nt!ObpCaptureObjectName+c6
805b64b4 f3a5 rep movs dword ptr es:[edi],dword ptr [esi]MM_INTERNAL_CODE: 0CUSTOMER_CRASH_COUNT: 1DEFAULT_BUCKET_ID: DRIVER_FAULTBUGCHECK_STR: 0x50PROCESS_NAME: SystemLAST_CONTROL_TRANSFER: from 805b6641 to 805b64b4STACK_TEXT:
f7922b94 805b6641 e100d600 f7922d4c f7922c18 nt!ObpCaptureObjectName+0xc6
f7922be8 805b0ab6 865eb0f0 e100d600 e100d600 nt!ObpCaptureObjectCreateInformation+0x135
f7922c2c 805ba669 f7922d24 865eb0f0 e100d600 nt!ObOpenObjectByName+0x62
f7922c84 8053d808 f7922d44 00010000 f7922d24 nt!NtOpenSymbolicLinkObject+0x73
f7922c84 804fec71 f7922d44 00010000 f7922d24 nt!KiFastCallEntry+0xf8
f7922d08 8056917c f7922d44 00010000 f7922d24 nt!ZwOpenSymbolicLinkObject+0x11
f7922d3c f79f76d6 f7922d4c 85f735a8 001a0018 nt!IoDeleteSymbolicLink+0x3c
f7922d58 80576633 861256e8 f6f6cb84 8055b1fc 2!HelloDDKUnload+0x46 [c:\share\2\driver.cpp @ 324]
f7922d74 80534dd0 f6f6cb84 00000000 865b5640 nt!IopLoadUnloadDriver+0x19
f7922dac 805c5a28 f6f6cb84 00000000 00000000 nt!ExpWorkerThread+0x100
f7922ddc 80541fa2 80534cd0 00000001 00000000 nt!PspSystemThreadStartup+0x34
00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16
STACK_COMMAND: kbFOLLOWUP_IP:
2!HelloDDKUnload+46 [c:\share\2\driver.cpp @ 324]
f79f76d6 8b55fc mov edx,dword ptr [ebp-4]FAULTING_SOURCE_CODE:
320:
321: //¨¦?3y¡¤?o?¨¢¡ä?¨®
322: UNICODE_STRING pLinkName = pDevExt->ustrSymLinkName;
323: IoDeleteSymbolicLink(&pLinkName);
> 324: pNextObj = pNextObj->NextDevice;
325: IoDeleteDevice( pDevExt->pDevice );
326: }
327: }
328:
329: /************************************************************************
SYMBOL_STACK_INDEX: 7SYMBOL_NAME: 2!HelloDDKUnload+46FOLLOWUP_NAME: MachineOwnerMODULE_NAME: 2IMAGE_NAME: 2.sysDEBUG_FLR_IMAGE_TIMESTAMP: 4b0a068fFAILURE_BUCKET_ID: 0x50_2!HelloDDKUnload+46BUCKET_ID: 0x50_2!HelloDDKUnload+46Followup: MachineOwner
---------
IoDeleteSymbolicLink就一个参数,先检查这个参数是不是指向无效内存了:
IoDeleteSymbolicLink参数1的类型是UNICODE_STRING指针,地址为f7922d4c,先看看UNICODE_STRING.Buffer(f7922d4c+4)里有没有正确的SymbolicLink字符串,WinDbg实时调试时输入:
我猜输出的应该全是问号?,说明pDevExt->ustrSymLinkName这个东西可能在其它地方已经被销毁了,剩下的就是慢慢下断点一步步来跟踪了,比如给pDevExt->ustrSymLinkName设个内存访问断点ba r x xxxxxxxx