OD 跟踪调试经验

44 篇文章 1 订阅
5 篇文章 4 订阅

如你要跟ebx,跟到某层遇到mov ebx, [ebp-430]之类的,不用讲,局部变量,此时在ebx下断,看ebx的值,再ctrl+f9, f8,到上一层看是怎么传进来这个参数的。比如是最后一次push传进来的,就向上一直跟最后一次push的寄存器。
      向上跟数值时,遇到ebp,esp之类的,一定要仔细看。仔细分析堆栈。并不要认为上一个函数一定是堆栈平衡。
      遇到跟数据是跟ecx的,一般情况,都很向上跟很多层,因为在面向对象语言中,对象指针都用ecx寄存器存放,而对象指针在函数中很重要的,或者说,一个对象函数中很多层函数都要保存这个对象指针,因为任何函数都可能用到。
     跟数据遇到要找eax时,第一反应因为是向上看最近一个CALL函数,但也不一定是最近一个CALL函数的返回值。因为有些函数是没有返回值的。所以您要做的就是在那个函数下断,再F8走过函数,看寄存器eax变化没有。
      从断游戏,分析数据角度讲,经常要用到断内存数据是谁写的。有的游戏是不能下内存断点的,此时可以考虑硬件断点。
      当你向某内存地址下写入断点,看谁写的它时,断下后发现是堆栈写,此时,你就不要在堆栈去下断点了,堆栈数据是随时都在写,这样是断不下来的。这样,就只有向上看反汇编,F8一步一步走,看是谁向堆栈写数据。
     有时需要断edi时,而edi是变化的,此时可以找规律,查看edi每次的step为多少,然后去到当前edi向后增加多少下断点。
在有些情况下,比如过程函数,分支函数,你直接下断点可能一直断下,所以此时您就需要用到条件断点,所以一定要掌握条件断点用法。
      经常注意当前模块位置,打个比如,当你断在MSVERT模块中,你需要找的edx,而edx就是一个地址,此时,可能MSVERT模块已经相对游戏领空很多层了,你一步一步向上找可能很花时间,也很容易跟错数据。此时你可能考虑一次性多次ctrl+f9, f8,直到Game模块,然后在Game模块中,调用MSVERT的这个函数下断,看下是怎么传参进去的(也就是是第几个参数,或者寄存器传的edx值)。这样,再向上找就方便多了。
      如果是做内挂,一定不要去说用封包好还是用CALL好,只可以告诉自己,哪个方便用哪个。CALL找不到,找封包,如果封包分析不出数据,就找CALL。也许换种方法更简单

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值