OllyDbg 支持所有标准类型的断点[breakpoints]————非条件和条件断点、内存断点(写入或访问)、硬件断点或在整个内存块上下断点(后两项功能只在 Window ME,NT,2000,XP中有效)。条件表达式可以非常复杂(“当 [ESP8] 的第 2 位被设置,并且 123456 位置处的字[word]小于10,或者 EAX 指向一个以“ABC”开头的 UNICODE 字串,但跳过前10次断点而在第11次中断”)。你可以设定一条或多条指令,当程序暂停时由OllyDbg传递给插件插件[plugins]。除了暂停,你还可以记录某个表达式的(可以带有简短的说明),或者记录OllyDbg已知的函数的参数。在Athlon 2600、Windows2000 环境下,OllyDbg 可以每秒处理多达 25000 个条件断点。
另一个有用的特性是跟踪。OllyDbg 支持两种方式的跟踪:hit和run。
在第一种情况下,它对指定范围内的每条指令上设置断点(比如在全部可执行代码中)。当到达设断的指令后,OllyDbg清除断点并且把该指令标记为hit。这种方法可以用来检测某段代码是否被执行。Hit跟踪速度惊人的快,在一个很短时间的启动后程序几乎达到了全速(译者注:这应该是与不进行调试时速度相比而言)。因为INT3断点可能对数据有灾难性的影响,所以我建议不要使用模糊识别过程。当代码没有被分析时Hit跟踪是不可以使用的。
Run跟踪[Run trace]是一步一步地执行程序,同时记录精确的运行历史和所有寄存器的内容、已知的参数和可选的指令(当代码是自修改时会有帮助)。当然,这需要大量的内存(每个指令需要15至50个字节,取决于调试的模式)但是可以精确地回溯和分析。你可以只在选定的一段代码甚至是一条指令中进行Run跟踪,或者你可以跳过无关紧要的代码。对于每个地址,OllyDbg能够计算这个地址在Run跟踪日志中出现的次数,虽然会导致执行缓慢但是可以得到代码执行的统计。比如说,某命令让你在每个已识别的过程入口处进行Run跟踪,那么统计[profile]就会给你每个过程被调用的次数。在到达某条指令、某个地址范围或指令计数器达到某一数时Run跟踪可以自动地暂停[pause]。
在多线程程序里OllyDbg可以自动管理线程[threads],如果你单步调试或跟踪程序,它会自动恢复当前线程而挂起其它线程。如果你运行程序,OllyDbg 会恢复先前的线程状态。
你可以为内存块建立快照(叫做备份)。OllyDbg会高亮显示所有的改动。你可以把备份保存到文件或从文件中读取出来,从而发现两次运行的不同之处。你可以查看备份,搜索下一处改动,恢复全部或选定的改动。补丁管理器[Patch manager]记录了上次应用到程序中的所有补丁,在下次调试时可以再次应用它们。你可以很容易地把你的补丁加在可执行文件上。OllyDbg 会自动进行修正。
你不能在带有 Win32 的16位 Windows 下使用 OllyDbg。这种32位扩展操作系统无法实现某些必需的调试功能。你既不能调试 DOS 程序也不能调试16位 NE(New Executable)式文件,我也没有打算在未来的版本中支持这些。
二、反汇编器[Disassembler]
反汇编器识别所有的标准80x86、保护、FPU、MMX和3DNow!指令集(包括Athlon扩展的MMX指令集)。但它不识别ISSI命令,尽管计划要在下个版本中支持这种命令。某些过时或者未公开的命令,像LOADALL,也不支持。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-41789-7.html
升級當天用了20來分鐘