Getting the right Exception Context from a Memory dump Fixed

吃饭回来,看到Share Source CLI团队的rss聚合上面Debug团队的juqiang发了一篇文章,说抓了一个minidump出现了:
WARNING: Unable to verify timestamp for mscorwks.dll的错误。上次我在查看一个mini Dump的时候,ntdll.dll好像也出现过这个问题,当时把符号文件重新加载了一次就OK了。这次看到他出现了同样的问题,忍不住要看看到底是什么原因导致这个问题,很幸运在Junfeng Zhang's Windows Programming Notes上面找到了一个完整的相同比较经典的案例,才贴上去的就被我找到了,:),贴出来一看就知道了:

When debug a memory dump, the dump may not in the right exception context when it is first loaded in the debugger. However, we can figure out the right context from the dump. <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

Let's load the dump.

c:\debuggers>cdb -z c:\temp\foo.dmp

Symbol search path is: *** Invalid ***
****************************************************************************
* Symbol loading may be unreliable without a symbol search path.           *
* Use .symfix to have the debugger choose a symbol path.                   *
* After setting your symbol path, use .reload to refresh symbol locations. *
****************************************************************************
Executable search path is:
Windows XP Version 2600 (Service Pack 2) MP (4 procs) Free x86 compatible
Product: WinNt, suite: SingleUserTS
Debug session time: Tue Feb 26 07:14:42.000 2008 (GMT-8)
System Uptime: not available
Process Uptime: 0 days 2:07:05.000
......................................
This dump file has an exception of interest stored in it.
The stored exception information can be accessed via .ecxr.
(8c4.3d8): Wake debugger - code 80000007 (first/second chance not available)
eax=00000000 ebx=7c884700 ecx=0006ee6c edx=7c90eb94 esi=00000000 edi=0006f40c
eip=7c90eb94 esp=0006ee78 ebp=0006f528 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
*** WARNING: Unable to verify timestamp for ntdll.dll
*** ERROR: Module load completed but symbols could not be loaded for ntdll.dll
ntdll+0xeb94:
7c90eb94 c3              ret

Let’s load symbols first.

0:000> .sympath SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols
Symbol search path is: SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols
0:000> .reload

......................................

Unfortunately .ecxr did not give us the right context.

0:000> .ecxr
eax=00000000 ebx=7c884700 ecx=0006ee6c edx=7c90eb94 esi=00000000 edi=0006f40c
eip=7c90eb94 esp=0006ee78 ebp=0006f528 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
ntdll!KiFastSystemCallRet:
7c90eb94 c3              ret
0:000> kb
ChildEBP RetAddr  Args to Child             
0006ee74 7c90e273 7c863487 d0000144 00000004 ntdll!KiFastSystemCallRet
0006ee78 7c863487 d0000144 00000004 00000000 ntdll!NtRaiseHardError+0xc
//这个Filter是dbghelp.dll里面的MiniDumpWriteDump()方法来处理的。
0006f528 77c32f0f 0006f578 00000000 00000000 kernel32!UnhandledExceptionFilter+0x653
0006f544 01006484 80000003 0006f578 01009818 msvcrt!_XcptFilter+0x161
WARNING: Stack unwind information not available. Following frames may be wrong.
0006ffc0 7c816fd7 00000016 03d7f12c 7ffd6000 foo+0x6484
0006fff0 00000000 0100660c 00000000 00000000 kernel32!BaseProcessStart+0x23

However, Kernel32!UnhandledExceptionFilter is on the stack. UnhandledExceptionFilter takes an EXCEPTION_POINTERS structure as its parameter, which contains the exception context.

0:000> dc 0006f578
0006f578  0006f69c 0006f6bc 01013ea4 00000001  .........>......
0006f588  fffffffe 0006f5b0 0006f5b0 01009c32  ............2...
0006f598  01015100 010066ff 0006f69c 0006ffb0  .Q...f..........
0006f5a8  0006f6bc 0006f670 0006f5d4 7c9037bf  ....p........7.|
0006f5b8  0006f69c 0006ffb0 0006f6bc 0006f670  ............p...
0006f5c8  0006fd4c 7c9037d8 0006ffb0 0006f684  L....7.|........
0006f5d8  7c90378b 0006f69c 0006ffb0 0006f6bc  .7.|............
0006f5e8  0006f670 01009c12 00000001 0006f69c  p...............

We can change to the exception context.


0:000> .cxr 0006f6bc
eax=0006a1fa ebx=6a803bd8 ecx=00353ee8 edx=00080608 esi=6a8043d8 edi=6a8045c0
eip=7c901230 esp=0006f988 ebp=0006fca4 iopl=0         nv up ei pl zr na pe nc
cs=001b  ss=0023  ds=0023  es=0023  fs=003b  gs=0000             efl=00000246
ntdll!DbgBreakPoint:
7c901230 cc              int     3

Now we have the correct exception context.


0:000> k
  *** Stack trace for last set context - .thread/.cxr resets it
ChildEBP RetAddr 
0006f984 6a870952 ntdll!DbgBreakPoint
WARNING: Stack unwind information not available. Following frames may be wrong.
0006fca4 6a8755f9 bar+0x70952
0006fcd4 6a8757ae bar+0x755f9
0006fcf0 6a86f49e bar+0x757ae
0006fcfc 6a86fc06 bar+0x6f49e
0006fd5c 7c9011a7 bar+0x6fc06
0006fd7c 7c923f31 ntdll!LdrpCallInitRoutine+0x14
0006fe00 7c81cd76 ntdll!LdrShutdownProcess+0x14f
0006fef4 7c81cdee kernel32!_ExitProcess+0x42
0006ff08 77c39d45 kernel32!ExitProcess+0x14
0006ff14 77c39e78 msvcrt!__crtExitProcess+0x32
0006ff24 77c39e90 msvcrt!_cinit+0xee
0006ff38 0100645e msvcrt!exit+0x12
0006ffc0 7c816fd7 foo+0x645e
0006fff0 00000000 kernel32!BaseProcessStart+0x23

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/269083.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

以太网测试工具

以太网是计算机网络的一种局域网技术&#xff0c;多种标准指定了以太网技术的标准&#xff0c;其中包括了物理层、电子信号及基质层协议等多种内容。以太网时目前应用比较广泛的局域网技术。像企业中所用到网络即可成为以太网。那么如果企业中如果网络时长发生延迟、掉帧、断网…

单例模式中饿汉式

写法一&#xff1a; 写法二&#xff1a;

css3 动画的播放、暂停和重新开始

播放 先在keyframes中创建动画&#xff0c;之后把它捆绑到某个选择器&#xff0c;就可以产生动画效果。html <div id"box" class"box"></div> css keyframes mymove {0% {margin-left: 0px;}50% {margin-left: 400px;}100% {margin-left: 0px…

以太网性能测试仪

目前企业办公遇到的首要问题就是网络方面&#xff0c;企业网络中的网络不通、网速慢、丢包、IP地址冲突等各种问题。网络管理人员手里没有趁手的网络故障仪器&#xff0c;解决问题将会非常麻烦。手持式的、口袋型、具备多种测试标准的以太网性能测试仪是先解决企业中网路管理人…

拉斯廷老兄

从前打了一场大仗&#xff0c;大仗结束后&#xff0c;许多士兵被遣散回家。拉斯廷老兄也退役了&#xff0c;他除了一袋干粮和四个金币外一无所有地上路了。圣彼得装成一个可怜的乞丐站在拉斯廷老兄的必经之路上&#xff0c;等他走过来便向他乞讨。拉斯廷老兄回答说&#xff1a;…

极寒极热天气是否可以使用福禄克DSX2-5000网线测试仪工作

当在室外测试网线和光纤时&#xff0c;天气的温度不仅会影响到工作的效率&#xff0c;电缆如果进行拉扯弯折也可能会在安装测试过程中受损。福禄克指定经销商—明辰智航的工程师推荐您了解一下安装测试电缆时的电缆可承受的温度。 在冬天&#xff0c;寒冷的天气致使工作总是不会…

分析uboot中 make xxx_config过程

make xxx_config实质上就是调用了 首先看MKCONFIG&#xff1a; 【注意】SRCTREE源文件下的目录 之后的语句&#xff1a; $(MKCONFIG) $(:_config) arm arm920t EmbedSky NULL s3c2440就相当于执行 #mkconfig xxx arm arm920t EmbedSky NULL s3c2440 #$0 $1 $2 $3 $4 $5 $…

mysql创建索引语句

1:表结构 2:创建索引语句 alter table staffs add index idx_staffs_nameAgePos(NAME,age,pos); 执行后效果

SQL注入法攻击一日通

随着B/S模式应用开发的发展&#xff0c;使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐&#xff0c;相当大一部分程序员在编写代码的时候&#xff0c;没有对用户输入数据的合法性进行判断&#xff0c;使应用程序存在安全隐患。用户可以提交…

视频监控存储服务器

现代化社会&#xff0c;无论是安防监控、城市道路监控、IDC机房监控&#xff0c;监控视频都需要多块硬盘进行存储起来。例如像雪亮工程中海量的视频存储到底存储方案是什么&#xff1f;今天航天安网的小编就带你来一探究竟。 雪亮工程是选择了航天安网视频数据智能管理整体解决…

保持饥饿,保持愚蠢

sss 转载于:https://www.cnblogs.com/llljpf/p/7090230.html

网络电话

“宽带电话”电话是一种有别于传统的电话服务。最大的区别在于&#xff0c;它以宽带网线作为通信线路&#xff0c;在不影响您已有的互联网应用的同时&#xff0c;为用户提供优质的电话服务。宽带电话使用非常方便&#xff0c;只需要将电话装置后面的网络接口连接到互联网或者局…

懒汉式,线程不安全

//懒汉式&#xff0c;线程不安全 public class Singleton2 {private static Singleton2 singleton;private Singleton2(){}public static Singleton2 getInstance(){if(singleton null){singleton new Singleton2();}return singleton;}public static void main(String[] ar…

光纤测试时怎么选择对应项目的测试标准及测试仪?

在建造数据中心、办公大楼时采用综合布线认证测试作为验收是必须要做的事。另外我们日常的网络维护、故障诊断也是需要对应的检测方法来帮助我们遇到问题时进行分析和判断问题。光纤测试仪针对不同的测试场景&#xff0c;都是使用什么测试标准呢&#xff1f;福禄克指定经销商—…

VueJS定义组件规则

Vue.js 组件组件&#xff08;Component&#xff09;是 Vue.js 最强大的功能之一&#xff0c;组件可以扩展 HTML 元素&#xff0c;封装可重用的代码。组件系统让我们可以用独立可复用的小组件来构建大型应用&#xff0c;几乎任意类型的应用的界面都可以抽象为一个组件树&#xf…

文件编码

在网站开发中&#xff0c;js文件通常要用utf8来保存才可以引入asp.net中&#xff0c;否则windows系统认不出来。windows系统的文本文件格式有几种utf8、ansi&#xff08;在中文操作系统中的gb2312使用此名称&#xff09;、等等&#xff0c;通常的文件传输都使用utf8。string类对…

企业中的局域网性能应该怎么得到保障?

如果提到局域网&#xff0c;我们首先想到的是&#xff0c;他的覆盖面积可以达到几千米之内。因为安装简单、费用低、现有向外扩展等多处优点&#xff0c;在各类企业办公地点运用比较广泛。局域网的好处就不用说了&#xff0c;而在使用局域网过程中&#xff0c;维护企业中的局域…

焊接件技术要求怎么写_钣金焊接件生锈了怎么办

相信很多厂家或企业都被钣金焊接件生锈的问题困扰过&#xff0c;打磨掉以后又会生锈&#xff0c;长期以往&#xff0c;不仅很耗人力物力&#xff0c;对工件本身的磨损也是严重的。那有没有一种更先进除锈方式可以更好的解决这一问题呢&#xff1f;答案是确定的。青工 机械研发的…

原生及jq方式使用ajax

1.原生js实现Ajax方法&#xff1a; var Ajax{get: function (url,fn){var objnew XMLHttpRequest(); // XMLHttpRequest对象用于在后台与服务器交换数据 obj.open(GET,url,true); obj.onreadystatechangefunction(){ if (obj.readyState 4 && obj.status 200 || obj.…