免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: einsnabuck
打印 上一主题 下一主题

[C++] 《coredump问题原理探究 windows版》 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2012-11-08 15:41 |只看该作者
5.4节联合体
这一节讲述了union在内存布局的特征.
完整原文请关注:
http://blog.sina.com.cn/s/blog_6d5fd32c01013yau.html

论坛徽章:
0
22 [报告]
发表于 2012-11-09 12:24 |只看该作者
6.1节无成员变量的类
这一节讲述了无成员变量的类在汇编层面上的布局,和如何寻找this指针.
完整原文请关注:
http://blog.sina.com.cn/s/blog_6d5fd32c01013yyb.html

由于我是想把方法和原理说得更简单点,让更多的人明白,所以整本书会比较啰嗦.请版上高手们见谅.

论坛徽章:
0
23 [报告]
发表于 2012-11-10 22:29 |只看该作者
6.2节有成员变量的类
这一节讲述了如何根据this指针来确定类的成员变量的内存布局,并用一个coredump的定位来验证这些特征.
完整原文请关注:
http://blog.sina.com.cn/s/blog_6d5fd32c01013zzb.html

由于我是想把方法和原理说得更简单点,让更多的人明白,所以整本书会比较啰嗦.请版上高手们见谅.

论坛徽章:
0
24 [报告]
发表于 2012-11-11 17:21 |只看该作者
6.3节虚函数
这一节讲述了虚函数和this的关系及虚函数之间的排列.
完整原文请关注:
http://blog.sina.com.cn/s/blog_6d5fd32c0101408s.html

由于我是想把方法和原理说得更简单点,让更多的人明白,所以整本书会比较啰嗦.请版上高手们见谅.

论坛徽章:
0
25 [报告]
发表于 2012-11-12 14:56 |只看该作者
6.4节单继承
这一节讲述了虚函数表在单继承时的变化和虚函数的排列顺序.
完整原文请关注:
http://blog.sina.com.cn/s/blog_6d5fd32c010140w0.html

由于我是想把方法和原理说得更简单点,让更多的人明白,所以整本书会比较啰嗦.请版上高手们见谅.

论坛徽章:
0
26 [报告]
发表于 2012-11-18 17:02 |只看该作者
coredump问题原理探究(windows x86版)6.5节多继承
这一节讲述了虚函数表在多继承下的变化,并用一个coredump例子来检验.
完整原文请关注:
http://blog.sina.com.cn/s/blog_6d5fd32c010147k3.html

由于我是想把方法和原理说得更简单点,让更多的人明白,所以整本书会比较啰嗦.请版上高手们见谅.

论坛徽章:
0
27 [报告]
发表于 2012-11-19 22:16 |只看该作者
coredump问题原理探究(windows x86版)7.1节vector
这一节讲述了vector的内存布局,并用一个coredump例子来检验.
完整原文请关注:
http://blog.sina.com.cn/s/blog_6d5fd32c010148sh.html

由于我是想把方法和原理说得更简单点,让更多的人明白,所以整本书会比较啰嗦.请版上高手们见谅.

论坛徽章:
5
技术图书徽章
日期:2013-08-17 07:26:49双子座
日期:2013-09-15 16:46:29双子座
日期:2013-09-25 08:17:09技术图书徽章
日期:2013-09-25 09:11:42天秤座
日期:2013-10-01 16:25:34
28 [报告]
发表于 2012-11-19 23:32 |只看该作者
你这个有JB用, 我有个 dump文件, 你看看是个什么错?

UIEditor.rar

9.07 KB, 下载次数: 3

论坛徽章:
0
29 [报告]
发表于 2012-11-25 00:28 |只看该作者
本帖最后由 einsnabuck 于 2012-11-25 00:51 编辑
__BlueGuy__ 发表于 2012-11-19 23:32
你这个有JB用, 我有个 dump文件, 你看看是个什么错?

看下面的回复:
  1. 0:000> kb
  2. ChildEBP RetAddr  Args to Child              
  3. 0012cae4 7c92d79f 00000000 0012cb40 000f0005 ntdll!KiFastSystemCallRet
  4. 0012cb18 7c92dc61 7c80b901 00000000 ffffffff ntdll!ZwCreateSection+0xc
  5. 0012cb74 7c92d592 7c809b9b 000000f4 0012ccc8 ntdll!NtMapViewOfSection+0xc
  6. 0012cc54 68d8ee61 02a500e0 02a50000 00004e1c ntdll!ZwClose+0xc
  7. 0012cc68 68d8eebd 02a500e0 02a50000 00004e1c dbghelp!GenAddressInSectionTable+0x13
  8. 0012cc7c 68d8ef5f 02a50000 00000000 00000006 dbghelp!GenImageDirectoryEntryToData32+0x3d
  9. 0012cc9c 68d8bf5a 02a50000 00000000 00000006 dbghelp!GenImageDirectoryEntryToData+0x3c
  10. [color=Red][b]0012ccc0[/b] 7c80b998[/color] ffffffff 02a50000 00000000 dbghelp!GenGetDebugRecord+0x1c
  11. [color=Red]7c92e96c 90909090[/color] 010cb890 00ba0000 ff7ffe03 kernel32!UnmapViewOfFile+0x14
  12. *** WARNING: Unable to verify timestamp for CEGUIBase.dll
  13. *** ERROR: Module load completed but symbols could not be loaded for CEGUIBase.dll
  14. WARNING: Frame IP not in any known module. Following frames may be wrong.
  15. 7c92e974 00ba0000 ff7ffe03 0008c212 90909090 0x90909090
  16. 7c92e978 ff7ffe03 0008c212 90909090 0db89090 CEGUIBase+0x230000
  17. 7c92e97c 0008c212 90909090 0db89090 ba000001 0xff7ffe03
  18. 7c92e980 90909090 0db89090 ba000001 7ffe0300 0x8c212
  19. 7c92e984 0db89090 ba000001 7ffe0300 10c212ff 0x90909090
  20. 7c92e988 ba000001 7ffe0300 10c212ff 90909000 0xdb89090
  21. 7c92e98c 7ffe02ff 10c212ff 90909000 b8909090 0xba000001
  22. 7c92e990 10c212ff 90909000 b8909090 0000010e SharedUserData+0x2ff
  23. 7c92e994 90909000 b8909090 0000010e fe0300ba 0x10c212ff
  24. 7c92e998 b8909090 0000010e fe0300ba c212ff7f 0x90909000
  25. 7c92e99c 00000000 fe0300ba c212ff7f 90900014 0xb8909090
复制代码
可以看到0012ccc0的内容已经被改写了,因为它不符合调用约定的标准.
在这里,我们看一下0012ccc0的内容:
  1. 0:000> dd 0012ccc0 L 20
  2. 0012ccc0  7c92e96c 7c80b998 ffffffff 02a50000
  3. 0012ccd0  00000000 00179318 [color=Red]0012ce28[/color] [color=Blue]68d8c37f[/color]
  4. 0012cce0  68d8c4a0 [color=Red]0012cfa8 [/color][color=Red]0012d258 [/color]0016d148
  5. 0012ccf0  00004550 0004014c 411095b1 00000000
  6. 0012cd00  00000000 210e00e0 0a07010b 00004000
  7. 0012cd10  00003a00 00000000 000010f1 00001000
  8. 0012cd20  76bc0000 00000000 00001000 00000200
  9. 0012cd30  00010005 00010005 00000004 00000000
复制代码
根据调用约定,我们应该看一下0012ce28,0012cfa8,0012d258.
我们先看一下0012ce28.根据调用约定,它下一个单元的内容68d8c37f应该是返回地址.如果不是,那么它就不是函数桢.可以看一下我第三章的内容.
  1. 0:000> ln 68d8c37f
  2. (68d8c1d2)   dbghelp!GenAllocateModuleObject+0x1ad   |  (68d8c4a8)   dbghelp!GenAllocateUnloadedModuleObject
复制代码
用同样的标准来看,0012cfa8,0012d258,就不是了.因为
  1. 0:000> ln 0012d258
  2. 0:000> ln 0016d148
复制代码
继续看一下0012ce28的内容所指向的单元和下一个单元
  1. 0:000> dd 0012ce28 L 2
  2. 0012ce28  0012ce4c 7c939dad
  3. 0:000> ln 7c939dad
  4. (7c939d39)   ntdll!RtlGetVersion+0x70   |  (7c939e26)   ntdll!RtlGetNtProductType
  5. 0:000> dd 0012ce4c L 2
  6. 0012ce4c  0012ce60 7c80ae95
  7. 0:000> ln 7c80ae95
  8. (7c80ae75)   kernel32!GetVersionExW+0x32   |  (7c80af5f)   kernel32!LongCompareStringW
  9. 0:000> dd 0012ce60 L 2
  10. 0012ce60  0012d070 0012ce84
  11. 0:000> ln 0012ce84
复制代码
虽然有部分是对的,但仍然没有到真正底下.因为真正到底下会有BaseProcessStart之类的.
由于刚才已经看到0012ccc0到0012cd3c的内容.所以下面应该看0012cd40的内容了
  1. 0:000> dd 0012cd40 L 20
  2. 0012cd40  0000b000 00000400 0000e9c2 00150000
  3. 0012cd50  00174000 00000000 0012ce2c 00150178
  4. 0012cd60  0012ce2c 7c930e91 00150608 7c93056d
  5. 0012cd70  003e7db8 003e7e4c 0016d148 00000000
  6. 0012cd80  000048b0 00174000 00150178 000003e0
  7. 0012cd90  00174008 00000000 00000000 00000000
  8. 0012cda0  00150178 000003c4 001795c8 00000038
  9. 0012cdb0  00000000 00000000 00000000 00000000
复制代码
通过下面的分析,还是没有
  1. 0:000> ln 7c930e91
  2. (7c93043d)   ntdll!RtlFreeHeap+0x4fc   |  (7c93058d)   ntdll!RtlpQueryDepthSList
  3. 0:000> dd 0012ce2c L 2
  4. 0012ce2c  7c939dad 0012ce84
  5. 0:000> ln 7c93056d
  6. (7c93043d)   ntdll!RtlFreeHeap+0x647   |  (7c93058d)   ntdll!RtlpQueryDepthSList
  7. 0:000> dd 00150608 L 2
  8. 00150608  ???????? ????????
复制代码
再看0012cdc0下面的内容.

  1. 0:000> dd 0012cdc0  L 20
  2. 0012cdc0  00000000 00000000 001795d0 00000548
  3. 0012cdd0  00000278 00000038 00001000 000000ec
  4. 0012cde0  000047b8 00000040 00000000 00000000
  5. 0012cdf0  00000000 00150000 00000000 00179318
  6. 0012ce00  00000000 00000000 00000000 01010000
  7. 0012ce10  000000a9 0012d258 0012d4f0 0012d4f0
  8. 0012ce20  7ffde000 0012ce70 0012ce4c 7c939dad
  9. 0012ce30  0012ce84 7f6f06c2 0000000e 00000000
  10. 0:000> ln 7ffde000
  11. 0:000> ln 7c939dad
  12. (7c939d39)   ntdll!RtlGetVersion+0x70   |  (7c939e26)   ntdll!RtlGetNtProductType
  13. 0:000> ln 7f6f06c2
复制代码
也是没有,0012ce4c 7c939dad这对在第一次已经分析了.
一直到
  1. 0:000> dd 0012cec0 L 20
  2. 0012cec0  0012d0ec 7c92ee18 7c930738 ffffffff
  3. 0012ced0  7c930732 7c9306ab 7c9306eb 0016d1ac
  4. 0012cee0  0012d258 0016d148 004000f0 0012cedc
  5. 0012cef0  00150640 0012cf6c 7c92ee18 7c930838
  6. 0012cf00  ffffffff 7c930833 7c812c6b 7c812c97
  7. 0012cf10  00000000 0012cfec 00000000 00000000
  8. 0012cf20  00000b47 00150640 00150640 0012d15c
  9. 0012cf30  7c931538 7ffdd000 7c9306eb 0016d148
  10. 0:000> ln 7c92ee18
  11. (7c92ee18)   ntdll!_except_handler3   |  (7c92eefe)   ntdll!_seh_longjmp_unwind
  12. Exact matches:
  13.     ntdll!_except_handler3 = <no type information>
  14. 0:000> dd 0012d0ec L 2
  15. 0012d0ec  0012d170 68d8b3a5
  16. 0:000> ln 68d8b3a5
  17. (68d8b2e4)   dbghelp!WriteThreadList+0xc1   |  (68d8b482)   dbghelp!WriteMemoryBlocks
  18. 0:000> dd 0012d170 L 2
  19. 0012d170  0012d190 68d8b75e
  20. 0:000> ln 68d8b75e
  21. (68d8b6db)   dbghelp!WriteDumpData+0x83   |  (68d8b80a)   dbghelp!MiniDumpProvideDump
  22. 0:000> dd 0012d190 L 2
  23. 0012d190  0012d2cc 68d8b97b
  24. 0:000> ln 68d8b97b
  25. (68d8b80a)   dbghelp!MiniDumpProvideDump+0x171   |  (68d8b9b0)   dbghelp!MiniDumpWriteDump
  26. 0:000> dd 0012d2cc L 2
  27. 0012d2cc  0012d32c 68d8ba78
  28. 0:000> ln 68d8ba78
  29. (68d8b9b0)   dbghelp!MiniDumpWriteDump+0xc8   |  (68d8bab8)   dbghelp!FreeMemory
  30. 0:000> dd 0012d32c L 2
  31. 0012d32c  0012d478 [color=Red]0042a642[/color]
  32. 0:000> ln 0042a642
  33. [color=Red]Unable to load image F:\我的工程\QW-WebGame-3d\trunk\Bin\Client\UIEditor\UIEditor.exe, Win32 error 0n2
  34. *** WARNING: Unable to verify timestamp for UIEditor.exe
  35. *** ERROR: Module load completed but symbols could not be loaded for UIEditor.exe[/color]
  36. 0:000> dd 0012d478 L 2
  37. 0012d478  0012ff20 0042a1ba
  38. 0:000> dd 0012ff20 L 2
  39. 0012ff20  0012ffc0 7820cccb
  40. 0:000> ln 7820cccb
  41. Unable to load image C:\WINDOWS\WinSxS\x86_Microsoft.VC80.MFC_1fc8b3b9a1e18e3b_8.0.50727.4053_x-ww_b77cec8e\mfc80.dll, Win32 error 0n2
  42. *** WARNING: Unable to verify timestamp for mfc80.dll
  43. f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\winmain.cpp(37)+0x7
  44. (7820cc83)   mfc80!AfxWinMain+0x48   |  (7820ccfb)   mfc80!CControlBar::GetMessageMap
  45. 0:000> dd 0012ffc0 L 2
  46. 0012ffc0  0012fff0 7c816fe7
  47. 0:000> ln 7c816fe7
  48. (7c816fc4)   kernel32!BaseProcessStart+0x23   |  (7c817001)   kernel32!CsrBasepNlsGetUserInfo
  49. 0:000> dd 0012fff0 L 2
  50. 0012fff0  00000000 00000000
复制代码
看到0042a642没有,如果你熟悉调试的话,你会知道main函数的地址是00401000,也就是说,你这个程序崩溃时的堆栈大致如下:
  1. ntdll!KiFastSystemCallRet
  2. ntdll!ZwCreateSection+0xc
  3. ntdll!NtMapViewOfSection+0xc
  4. ntdll!ZwClose+0xc
  5. dbghelp!GenAddressInSectionTable+0x13
  6. dbghelp!GenImageDirectoryEntryToData32+0x3d
  7. 0dbghelp!GenImageDirectoryEntryToData+0x3c
  8. dbghelp!GenGetDebugRecord+0x1c
  9. kernel32!UnmapViewOfFile+0x14
  10. .....<这些已经被栈溢出了>.......
  11. ntdll!_except_handler3
  12. dbghelp!WriteThreadList+0xc1
  13. dbghelp!WriteDumpData+0x83
  14. dbghelp!MiniDumpProvideDump+0x171
  15. dbghelp!MiniDumpWriteDump+0xc8
  16. 0042a642
  17. 0042a1ba
  18. mfc80!AfxWinMain+0x48
  19. kernel32!BaseProcessStart+0x23
复制代码
相信
  1. 0042a642
  2. 0042a1ba
复制代码
这两个地址会看吧.把dump文件和可执行文件都用windbg打开就行了.这种情况叫做栈溢出.你可以根据上面的分析,来推算出溢出了多少字节.

有什么不会,可以直接问,用激将法没问题.但不能说粗口.

对了,我在www.xcoredump.com设下擂台,欢迎过来发贴挑战

论坛徽章:
0
30 [报告]
发表于 2012-12-18 22:49 |只看该作者
coredump问题原理探究(windows x86版)7.2节list
这一节讲述了list的内存布局,并用一个coredump例子来检验.
完整原文请关注:
http://blog.csdn.net/xuzhina/article/details/8316606
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP