关于分析DUMP文件的一些想法:
在分析一个驱动蓝屏的时候,如果有驱动的PDB文件就很容易找到出错的地方,然是如果没有PDB文件,往往比较麻烦,只能给出个大题的东西,今天调试了一下DUMP文件,有点感触,先来分析一下,(ProbeForWrite(bb,10,10);bb为NULL指针)
双机调试的方法不说了,直接开始调试:加载驱动文件,直接蓝屏了,这个时候WINDBG给出了一下提示:
FOLLOWUP_IP:
HelloDDK+5ae
f7c455ae 8be5 mov esp,ebp
BUGCHECK_STR: 0x7E
DEFAULT_BUCKET_ID: NULL_DEREFERENCE
LAST_CONTROL_TRANSFER: from f7c455ae to 8060d589
STACK_TEXT:
f7a01c54 f7c455ae 00000000 0000000a 0000000a nt!ProbeForWrite+0x39
WARNING: Stack unwind information not available. Following frames may be wrong.
f7a01c74 f7c45504 f7a01d4c 805777f1 864d2b10 HelloDDK+0x5ae
f7a01c7c 805777f1 864d2b10 860cd000 00000000 HelloDDK+0x504
f7a01d4c 80577901 800008a8 00000001 00000000 nt!IopLoadDriver+0x66d
f7a01d74 80535c32 800008a8 00000000 865b4020 nt!IopLoadUnloadDriver+0x45
f7a01dac 805c71e0 f7a69cf4 00000000 00000000 nt!ExpWorkerThread+0x100
f7a01ddc 80542e12 80535b32 00000001 00000000 nt!PspSystemThreadStartup+0x34
00000000 00000000 00000000 00000000 00000000 nt!KiThreadStartup+0x16
SYMBOL_STACK_INDEX: 1
SYMBOL_NAME: HelloDDK+5ae
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: HelloDDK
IMAGE_NAME: HelloDDK.sys
DEBUG_FLR_IMAGE_TIMESTAMP: 4d60d8a6
STACK_COMMAND: .cxr 0xfffffffff7a01880 ; kb
FAILURE_BUCKET_ID: 0x7E_HelloDDK+5ae
BUCKET_ID: 0x7E_HelloDDK+5ae
这里我只给出其中的一部分代码。
其中有用的信息大家可以自己分析,今天主要想找找出错位置,看其中的一部分
HelloDDK+5ae
f7c455ae 8be5 mov esp,ebp
主要看HelloDDK+5ae,也就是出错在加载地址的5ae偏移处。
然后从新打开虚拟机,挂上调试,这个时候先加载驱动,(先别启动驱动,也就是别让你的驱动蓝),然后再WINDBG中BREAK一下,然后下bp nt!IopLoadDriver+0x66a,这个是SP3的(P2的为bp nt!IopLoadDriver+0x669),然后再启动驱动,这个时候断下来了,如果所示:
然后单布进入(F11)
得到如下图:
这个时候就能得到HelloDDK的基址为f7c0d000然后加上5ae得到f7c0d5ae
然后反汇编f7c0d5ae得到
看到没有事这个地方或者上面出错了,然后咱往上面看得到
这里就能判断出来时这个CALL出问题了,实际上是第三个push 0的问题
在分析一下
这里就知道是ProbeForWrite出了问题了,可以用IDA在分析一下,然后用二进制工具改,也可以直接用WINDBG修改
如下eb f7c0d5a0 90 90 90 90 90 90 90 90 90 90 90 90 90 90
然后再反汇编看一下
确定好后运行即可
当然,这里是最简单的东西,实际上好多NOP掉了也会出错,不过嘛,往往很多只需要改成JMP 或直接JZ或JNZ就能实现你想要的东西,希望对你有帮助。
- 标 题:驱动蓝屏后调试DUMP文件
- 作 者:无泪城
- 时 间:2011-02-20 17:52:42
- 链 接:http://bbs.pediy.com/showthread.php?t=129630