逆向调试初探

在开发过程中,我们经常会调用第三方库,当程序出了问题时,有时候崩在了第三方库内,问题就比较难查了,这个时候要找出原因,就需要我们有一定的逆向功底,因为一般第三方库的源代码我们是看不到的,只能通过反汇编的方法来查找。

近日,在某项目的开发过程中,遇到一个问题。我们一台服务器在运行过程中出现了几次崩溃,产生若干DMP文件。我们用windbg打开,设置符号路径,并加载符号。输入

!analyze -v,稍等片刻,windbg便输出了初步的分析结果。如下图所示:

 

其中FAULTING_IP显示了发生错误的那行代码,其汇编代码为:

cmp  dword ptr [eax+14h], edi , 即将以eax为基址,偏移14h处的数值与edi比较。

紧接着这行代码的是EXCEPTION_RECORD这个结构体的信息,当异常发生的时候,系统会自动生成这么一个结构体,来记录异常发生时的信息。我们来看ExceptionAddress表示异常发生时那条指令的地址,图中为100057cb,ExceptionCode为异常代码,为c0000005,这个显而易见,是访问违例了。

NumberParameters是一个用于描述异常的附加参数的数组,对于不同类型的异常,有不同的解释。当异常类型为访问违例时,该数组的第一个元素包含了一个读写标志,表示引起访问违归的操作类型。如果这个值为0,表示线程试图读取不可访问的数据,如果这个值为1,表示线程试图写入不可访问的地址,如果这个值为8,表示线程引发了一个用户模式的DEP违规。数组的第二个元素指定了不可访问数据的虚拟地址。因此综合起来就是,试图读取00000014处的数据时,发生了访问违例。再结合之前的汇编代码,可以推断出根本原因是因为eax0,那么接下来ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值