如何知道程序崩溃原因?

在使用电脑过程中,偶尔会遇到个别程序停止工作(如下图),有的甚至直接闪退了。
停止工作图
如果程序问题打开就能重现的,用调试软件打开程序,调试运行,程序关闭后就可以定位到错误地址。
如果程序问题无法简单重现,那就很难下手了。好在系统的事件查看器可以捕捉到这些错误并记录(如下图)。
事件日志
关注几点:

  • 错误模块名称:bugcheck.exe

知道错误代码位于哪个程序,有时候可能是程序加载的dll模块

  • 异常代码:0xc0000094

可以参考百度百科GetExceptionCode的介绍
异常代码0xc0000094对应的是EXCEPTION_INT_DIVIDE_BY_ZERO,整数除法的除数是0时引发该异常。
bugcheck.exe是我特意设置的除0的程序,错误对上了。

  • 错误偏移量:0x000116b2

以IDA Pro静态反编译程序为例。
EXE程序崩溃地址是400000+错误偏移量=4116b2,如下图
DLL模块崩溃地址是10000000+错误偏移量=100116b2

崩溃地址
上图idiv就是有符号数除法指令,之所以出错是因为除数为0。

想要调试错误,需要有逆向基础,这里不做介绍。

发布了34 篇原创文章 · 获赞 27 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/hfhbutn/article/details/84307574