[翻译]手把手教你修复被破坏的堆栈
English: http://blogs.microsoft.co.il/sasha/2011/07/20/manual-stack-walking/
栈被破坏了可一点都不好玩儿!尤其是当你在分析crash dump或者程序发生异常的时候,我猜首先要做的事,可能就是先查看一下儿堆栈调用。
但是发现当前线程的栈被破坏了,你的主要分析工具也无法显示堆栈,这可咋办哩?
尽管如此,有时候也可以修复被破坏的堆栈。我已经出了一些关于.NET和C++调试的教程,但是大家的要求,我也会再展示一个例子
.net 调试:http://sela.co.il/syl/syllabus.aspx?CourseCode=DNDebug
c++调试:http://sela.co.il/syl/syllabus.aspx?CourseCode=CPPDbg
你可以从http://s.sashag.net/ocrImV这个网盘中下载本次例子中需要的dump文件、符号文件以及程序源码文件!
OK,我们使用WinDbg(32-bit)打开dump文件,获取如下信息:
User Mini Dump File: Only registers, stack and portions of memory are available . . . This dump file has an exception of interest stored in it. The stored exception information can be accessed via .ecxr. (1ed0.870): Access violation – code c0000005 (first/second chance not available) eax=00000000 ebx=00000001 ecx=73536122 edx=00000000 esi=002af37c edi=0000004e eip=00000000 esp=002af1a8 ebp=00000000 iopl=0 nv up ei pl zr na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010246 00000000 ?? ??? 0:000> k ChildEBP RetAddr WARNING: Frame IP not in any known module. Following frames may be wrong. 002af1a4 00000000 0x0
注意:上传附件及图片大小不得大于30M。
⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途。
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。
复制成功
