- 论坛徽章:
- 0
|
本帖最后由 einsnabuck 于 2012-11-25 00:51 编辑
__BlueGuy__ 发表于 2012-11-19 23:32 ![]()
你这个有JB用, 我有个 dump文件, 你看看是个什么错?
看下面的回复:- 0:000> kb
- ChildEBP RetAddr Args to Child
- 0012cae4 7c92d79f 00000000 0012cb40 000f0005 ntdll!KiFastSystemCallRet
- 0012cb18 7c92dc61 7c80b901 00000000 ffffffff ntdll!ZwCreateSection+0xc
- 0012cb74 7c92d592 7c809b9b 000000f4 0012ccc8 ntdll!NtMapViewOfSection+0xc
- 0012cc54 68d8ee61 02a500e0 02a50000 00004e1c ntdll!ZwClose+0xc
- 0012cc68 68d8eebd 02a500e0 02a50000 00004e1c dbghelp!GenAddressInSectionTable+0x13
- 0012cc7c 68d8ef5f 02a50000 00000000 00000006 dbghelp!GenImageDirectoryEntryToData32+0x3d
- 0012cc9c 68d8bf5a 02a50000 00000000 00000006 dbghelp!GenImageDirectoryEntryToData+0x3c
- [color=Red][b]0012ccc0[/b] 7c80b998[/color] ffffffff 02a50000 00000000 dbghelp!GenGetDebugRecord+0x1c
- [color=Red]7c92e96c 90909090[/color] 010cb890 00ba0000 ff7ffe03 kernel32!UnmapViewOfFile+0x14
- *** WARNING: Unable to verify timestamp for CEGUIBase.dll
- *** ERROR: Module load completed but symbols could not be loaded for CEGUIBase.dll
- WARNING: Frame IP not in any known module. Following frames may be wrong.
- 7c92e974 00ba0000 ff7ffe03 0008c212 90909090 0x90909090
- 7c92e978 ff7ffe03 0008c212 90909090 0db89090 CEGUIBase+0x230000
- 7c92e97c 0008c212 90909090 0db89090 ba000001 0xff7ffe03
- 7c92e980 90909090 0db89090 ba000001 7ffe0300 0x8c212
- 7c92e984 0db89090 ba000001 7ffe0300 10c212ff 0x90909090
- 7c92e988 ba000001 7ffe0300 10c212ff 90909000 0xdb89090
- 7c92e98c 7ffe02ff 10c212ff 90909000 b8909090 0xba000001
- 7c92e990 10c212ff 90909000 b8909090 0000010e SharedUserData+0x2ff
- 7c92e994 90909000 b8909090 0000010e fe0300ba 0x10c212ff
- 7c92e998 b8909090 0000010e fe0300ba c212ff7f 0x90909000
- 7c92e99c 00000000 fe0300ba c212ff7f 90900014 0xb8909090
复制代码 可以看到0012ccc0的内容已经被改写了,因为它不符合调用约定的标准.
在这里,我们看一下0012ccc0的内容:- 0:000> dd 0012ccc0 L 20
- 0012ccc0 7c92e96c 7c80b998 ffffffff 02a50000
- 0012ccd0 00000000 00179318 [color=Red]0012ce28[/color] [color=Blue]68d8c37f[/color]
- 0012cce0 68d8c4a0 [color=Red]0012cfa8 [/color][color=Red]0012d258 [/color]0016d148
- 0012ccf0 00004550 0004014c 411095b1 00000000
- 0012cd00 00000000 210e00e0 0a07010b 00004000
- 0012cd10 00003a00 00000000 000010f1 00001000
- 0012cd20 76bc0000 00000000 00001000 00000200
- 0012cd30 00010005 00010005 00000004 00000000
复制代码 根据调用约定,我们应该看一下0012ce28,0012cfa8,0012d258.
我们先看一下0012ce28.根据调用约定,它下一个单元的内容68d8c37f应该是返回地址.如果不是,那么它就不是函数桢.可以看一下我第三章的内容.- 0:000> ln 68d8c37f
- (68d8c1d2) dbghelp!GenAllocateModuleObject+0x1ad | (68d8c4a8) dbghelp!GenAllocateUnloadedModuleObject
复制代码 用同样的标准来看,0012cfa8,0012d258,就不是了.因为- 0:000> ln 0012d258
- 0:000> ln 0016d148
复制代码 继续看一下0012ce28的内容所指向的单元和下一个单元- 0:000> dd 0012ce28 L 2
- 0012ce28 0012ce4c 7c939dad
- 0:000> ln 7c939dad
- (7c939d39) ntdll!RtlGetVersion+0x70 | (7c939e26) ntdll!RtlGetNtProductType
- 0:000> dd 0012ce4c L 2
- 0012ce4c 0012ce60 7c80ae95
- 0:000> ln 7c80ae95
- (7c80ae75) kernel32!GetVersionExW+0x32 | (7c80af5f) kernel32!LongCompareStringW
- 0:000> dd 0012ce60 L 2
- 0012ce60 0012d070 0012ce84
- 0:000> ln 0012ce84
复制代码 虽然有部分是对的,但仍然没有到真正底下.因为真正到底下会有BaseProcessStart之类的.
由于刚才已经看到0012ccc0到0012cd3c的内容.所以下面应该看0012cd40的内容了- 0:000> dd 0012cd40 L 20
- 0012cd40 0000b000 00000400 0000e9c2 00150000
- 0012cd50 00174000 00000000 0012ce2c 00150178
- 0012cd60 0012ce2c 7c930e91 00150608 7c93056d
- 0012cd70 003e7db8 003e7e4c 0016d148 00000000
- 0012cd80 000048b0 00174000 00150178 000003e0
- 0012cd90 00174008 00000000 00000000 00000000
- 0012cda0 00150178 000003c4 001795c8 00000038
- 0012cdb0 00000000 00000000 00000000 00000000
复制代码 通过下面的分析,还是没有- 0:000> ln 7c930e91
- (7c93043d) ntdll!RtlFreeHeap+0x4fc | (7c93058d) ntdll!RtlpQueryDepthSList
- 0:000> dd 0012ce2c L 2
- 0012ce2c 7c939dad 0012ce84
- 0:000> ln 7c93056d
- (7c93043d) ntdll!RtlFreeHeap+0x647 | (7c93058d) ntdll!RtlpQueryDepthSList
- 0:000> dd 00150608 L 2
- 00150608 ???????? ????????
复制代码 再看0012cdc0下面的内容.
- 0:000> dd 0012cdc0 L 20
- 0012cdc0 00000000 00000000 001795d0 00000548
- 0012cdd0 00000278 00000038 00001000 000000ec
- 0012cde0 000047b8 00000040 00000000 00000000
- 0012cdf0 00000000 00150000 00000000 00179318
- 0012ce00 00000000 00000000 00000000 01010000
- 0012ce10 000000a9 0012d258 0012d4f0 0012d4f0
- 0012ce20 7ffde000 0012ce70 0012ce4c 7c939dad
- 0012ce30 0012ce84 7f6f06c2 0000000e 00000000
- 0:000> ln 7ffde000
- 0:000> ln 7c939dad
- (7c939d39) ntdll!RtlGetVersion+0x70 | (7c939e26) ntdll!RtlGetNtProductType
- 0:000> ln 7f6f06c2
复制代码 也是没有,0012ce4c 7c939dad这对在第一次已经分析了.
一直到- 0:000> dd 0012cec0 L 20
- 0012cec0 0012d0ec 7c92ee18 7c930738 ffffffff
- 0012ced0 7c930732 7c9306ab 7c9306eb 0016d1ac
- 0012cee0 0012d258 0016d148 004000f0 0012cedc
- 0012cef0 00150640 0012cf6c 7c92ee18 7c930838
- 0012cf00 ffffffff 7c930833 7c812c6b 7c812c97
- 0012cf10 00000000 0012cfec 00000000 00000000
- 0012cf20 00000b47 00150640 00150640 0012d15c
- 0012cf30 7c931538 7ffdd000 7c9306eb 0016d148
- 0:000> ln 7c92ee18
- (7c92ee18) ntdll!_except_handler3 | (7c92eefe) ntdll!_seh_longjmp_unwind
- Exact matches:
- ntdll!_except_handler3 = <no type information>
- 0:000> dd 0012d0ec L 2
- 0012d0ec 0012d170 68d8b3a5
- 0:000> ln 68d8b3a5
- (68d8b2e4) dbghelp!WriteThreadList+0xc1 | (68d8b482) dbghelp!WriteMemoryBlocks
- 0:000> dd 0012d170 L 2
- 0012d170 0012d190 68d8b75e
- 0:000> ln 68d8b75e
- (68d8b6db) dbghelp!WriteDumpData+0x83 | (68d8b80a) dbghelp!MiniDumpProvideDump
- 0:000> dd 0012d190 L 2
- 0012d190 0012d2cc 68d8b97b
- 0:000> ln 68d8b97b
- (68d8b80a) dbghelp!MiniDumpProvideDump+0x171 | (68d8b9b0) dbghelp!MiniDumpWriteDump
- 0:000> dd 0012d2cc L 2
- 0012d2cc 0012d32c 68d8ba78
- 0:000> ln 68d8ba78
- (68d8b9b0) dbghelp!MiniDumpWriteDump+0xc8 | (68d8bab8) dbghelp!FreeMemory
- 0:000> dd 0012d32c L 2
- 0012d32c 0012d478 [color=Red]0042a642[/color]
- 0:000> ln 0042a642
- [color=Red]Unable to load image F:\我的工程\QW-WebGame-3d\trunk\Bin\Client\UIEditor\UIEditor.exe, Win32 error 0n2
- *** WARNING: Unable to verify timestamp for UIEditor.exe
- *** ERROR: Module load completed but symbols could not be loaded for UIEditor.exe[/color]
- 0:000> dd 0012d478 L 2
- 0012d478 0012ff20 0042a1ba
- 0:000> dd 0012ff20 L 2
- 0012ff20 0012ffc0 7820cccb
- 0:000> ln 7820cccb
- Unable to load image C:\WINDOWS\WinSxS\x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.4053_x-ww_b77cec8e\mfc80.dll, Win32 error 0n2
- *** WARNING: Unable to verify timestamp for mfc80.dll
- f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\winmain.cpp(37)+0x7
- (7820cc83) mfc80!AfxWinMain+0x48 | (7820ccfb) mfc80!CControlBar::GetMessageMap
- 0:000> dd 0012ffc0 L 2
- 0012ffc0 0012fff0 7c816fe7
- 0:000> ln 7c816fe7
- (7c816fc4) kernel32!BaseProcessStart+0x23 | (7c817001) kernel32!CsrBasepNlsGetUserInfo
- 0:000> dd 0012fff0 L 2
- 0012fff0 00000000 00000000
复制代码 看到0042a642没有,如果你熟悉调试的话,你会知道main函数的地址是00401000,也就是说,你这个程序崩溃时的堆栈大致如下:- ntdll!KiFastSystemCallRet
- ntdll!ZwCreateSection+0xc
- ntdll!NtMapViewOfSection+0xc
- ntdll!ZwClose+0xc
- dbghelp!GenAddressInSectionTable+0x13
- dbghelp!GenImageDirectoryEntryToData32+0x3d
- 0dbghelp!GenImageDirectoryEntryToData+0x3c
- dbghelp!GenGetDebugRecord+0x1c
- kernel32!UnmapViewOfFile+0x14
- .....<这些已经被栈溢出了>.......
- ntdll!_except_handler3
- dbghelp!WriteThreadList+0xc1
- dbghelp!WriteDumpData+0x83
- dbghelp!MiniDumpProvideDump+0x171
- dbghelp!MiniDumpWriteDump+0xc8
- 0042a642
- 0042a1ba
- mfc80!AfxWinMain+0x48
- kernel32!BaseProcessStart+0x23
复制代码 相信这两个地址会看吧.把dump文件和可执行文件都用windbg打开就行了.这种情况叫做栈溢出.你可以根据上面的分析,来推算出溢出了多少字节.
有什么不会,可以直接问,用激将法没问题.但不能说粗口.
对了,我在www.xcoredump.com设下擂台,欢迎过来发贴挑战 |
|