欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[翻译]手把手教你修复被破坏的堆栈

[翻译]手把手教你修复被破坏的堆栈

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。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功