windows客户端崩溃分析和调试

本文详细介绍了Windows客户端崩溃分析的过程,包括确认错误码、分析C++操作、多进程调试、死锁处理等。强调了非法访问和对象生命周期管理的重要性,并提供了利用Windbg、VS等工具进行调试的方法,如通过析构函数定位问题、还原上下文、利用IDA辅助分析等。
摘要由CSDN通过智能技术生成
本文介绍windows上崩溃分析的一些手段,顺便提多进程调试、死锁等。

1.崩溃分析过程
1.1 确认错误码
无论是用windbg还是用vs,首先应该注意的是错误码,而90%以上的崩溃都是非法访问。
在非法访问时,可以看一下访问的目标地址。地址是0,或者离0很近(0x00000008或0xfffffffc),
一般和空指针相关。如果是一个貌似正常的地址,一般是对象已析构后访问其数据,或者堆破坏。

1.2确认崩溃对应的C++操作
什么是确认崩溃对应的C++操作:
比如非法访问,通常得有个mov指令才会触发内存访问,然后导致崩溃。而mov指针对应于C++的哪一步呢?
比如a->b->c->foo();
在看到源码时,会定位于这一行,但是,并不清楚是哪一步访问失败。所以这个时候要查看对应汇编代码。
大概会有好几个mov,简单的分析就知道是哪一步时访问失败。

对编码的影响:
这就要求,不要在单个语句中写太复杂的东西比如
x ? b[i] : y > 0 ? c->member[8] : *ptr;
这样的代码崩溃,要还原到错误的地方很难。

虚函数调用:
通常
mov edx, dword ptr [ecx]
mov edx, dword ptr [edx+0x??]
call edx
意味着虚函数调用,每一行都可能是崩溃位置(在call内崩溃时,vs会标
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值