反汇编定位release版本程序bug

 

今天帮忙调试了一个release版本的程序,此程序运行较长一段时间后终于(不挂就不好查了)挂了,系统报错是某处的指令访问了非法地址,显然是内存访问越界(不测试也能猜到,呵呵)。

点击系统报错对话框的cancel,进入vc6的反汇编调试模式,定位到指令所在的汇编代码,将此指令所在函数(函数以0x10对齐,结尾一般都有nop指令)的所有汇编代码拷贝出来分析。搜索cmp指令,运气比较好,汇编代码中的cmp指令中有一些特殊值,搜索特殊值定位到了程序的一个函数(运气又特别好,是定位到了一个函数,而不是多个函数)。

函数太长(500多行),只好继续分析,根据反汇编后的指令位置可以估计大概在此函数的2/3处有问题。结合c++代码和非法指令附近的asm代码,找到一个esp相关的临时量,可以肯定是函数内的栈上临时变量,这个变量在非法指令中×8,c++代码中有个POINT刚好大小就是8,非法指令中还+10h,于是可以猜测有这样一个POINT[i+2]操作越界。

分析完毕。

以前学asm主要是为了辅助理解系统、c/c++语言等,今天基本上是第一次用于查bug(我自己的程序基本上没多少bug,即是有我也能直接猜出来大概在哪,呵呵),感觉asm的知识所记不多,还是应该加强学习。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值