惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Jina AI
Jina AI
博客园 - Franky
Apple Machine Learning Research
Apple Machine Learning Research
酷 壳 – CoolShell
酷 壳 – CoolShell
阮一峰的网络日志
阮一峰的网络日志
量子位
雷峰网
雷峰网
宝玉的分享
宝玉的分享
V
Visual Studio Blog
博客园_首页
小众软件
小众软件
The Cloudflare Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
大猫的无限游戏
大猫的无限游戏
博客园 - 聂微东
S
SegmentFault 最新的问题
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
博客园 - 叶小钗
月光博客
月光博客
博客园 - 三生石上(FineUI控件)
人人都是产品经理
人人都是产品经理
WordPress大学
WordPress大学

博客园 - Hover

找出隐藏的字符 - Hover - 博客园 GZIP压缩导致无法输出缓冲区内容。 asp.net 开发WAP MFC 试图执行系统不支持的操作 VC2005 无法打开RC文件.提示Opened in another editor DIALOG Undeclared identifier 找回VISUAL STUDIO 2005丢失的模板 用OD和CE结合跟踪查找基址 查看发包数据bp Send 修改boot.ini使W3wp使用更多的物理内存 查找游戏帐号 查找选中怪ID相对于基址的偏移 提醒精灵.NET 发布 (小技巧九)设置开机运行功能 简单地址重写 使用.NET Reflector插件FileDisassembler还原源码! ASP输出WOrd、Excel文件! (小技巧八)计算字符串的长度 修改Windows 2003 的默认上传文件大小!
[转]OD 跟踪调试经验
Hover · 2008-07-01 · via 博客园 - Hover

原作者不详

如你要跟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。也许换种方法更简单