2024年4月26日发(作者:)

OllyDBG新手使用说明书

OLLYDBG完全教程(一)

一、什么是 OllyDbg?

OllyDbg 是一种具有可视化界面的 32 位汇编-分析调试器。它的特别之处在于

可以在没有源代码时解决问题,并且可以处理其它编译器无法解决的难题。

Version 1.10 是最终的发布版本。 这个工程已经停止,我不再继续支持这个软

件了。但不用担心:全新打造的 OllyDbg 2.00 不久就会面世!

运行环境: OllyDbg 可以以在任何采用奔腾处理器的 Windows 95、98、ME、NT

或是 XP(未经完全测试)操作系统中工作,但我们强烈建议您采用300-MHz以

上的奔腾处理器以达到最佳效果。还有,OllyDbg 是极占内存的,因此如果您需

要使用诸如追踪调试[Trace]之类的扩展功能话,建议您最好使用128MB以上

的内存。

支持的处理器: OllyD的数据格式,但是不支持SSE2指令集。bg 支持所有

80x86、奔腾、MMX、3DNOW!、Athlon 扩展指令集、SSE指令集以及相关配置:

有多达百余个(天呀!)选项用来设置 OllyDbg 的外观和运行。

数据格式: OllyDbg 的数据窗口能够显示的所有数据格式:HEX、ASCII、UNICODE、

16/32位有/无符号/HEX整数、32/64/80位浮点数、地址、反汇编(MASM、IDEAL

或是HLA)、PE文件头或线程数据块。

帮助: 此文件中包含了关于理解和使用 OllyDbg 的必要的信息。如果您还有

Windows API 帮助文件的话(由于版权的问题 没有包括在内),您

可以将它挂在 OllyDbg 中,这样就可以快速获得系统函数的相关帮助。

启动: 您可以采用命令行的形式指定可执行文件、也可以从菜单中选择,或直

接拖放到OllyDbg中,或者重新启动上一个被调试程序,或是挂接[Attach]一

个正在运行的程序。OllyDbg支持即时调试。OllyDbg根本不需要安装,可直接

在软盘中运行!

调试DLLs: 您可以利用OllyDbg调试标准动态链接库 (DLLs)。OllyDbg 会自

动运行一个可执行程序。这个程序会加载链接库,并允许您调用链接库的输出函

数。

源码级调试: OllyDbg 可以识别所有 Borland 和 Microsoft 格式的调试信息。

这些信息包括源代码、函数名、标签、全局变量、静态变量。有限度的支持动态

(栈)变量和结构。

代码高亮: OllyDbg 的反汇编器可以高亮不同类型的指令(如:跳转、条件跳

转、入栈、出栈、调用、返回、特殊的或是无效的指令)和不同的操作数(常规

[general]、FPU/SSE、段/系统寄存器、在栈或内存中的操作数,常量)。您

可以定制个性化高亮方案。

线程: OllyDbg 可以调试多线程程序。因此您可以在多个线程之间转换,挂起、

恢复、终止线程或是改变线程优先级。并且线程窗口将会显示每个线程的错误(就

像调用 GETLASTERROR 返回一样)。

分析:OllyDbg 的最大特点之一就是分析。它会分析函数过程、循环语句、选择

语句、表[tables]、常量、代码中的字符串、欺骗性指令[tricky constructs]、

API调用、函数中参数的数目,import表等等。这些分析增加了黑吧代码的可读

性,减少了出错的可能性,使得我们的调试工作更加容易。

Object扫描。 OllyDbg 可以扫描Object文件/库(包括 OMF 和 COFF 格式),

解压代码段[code segments]并且对其位置进行定向。

Implib扫描。 由于一些DLL文件的输出函数使用的索引号,对于人来说,这些

索引号没有实际含义。如果您有与DLL相应的输入库[import library],OllyDbg

就可以将序号转换成符号名称。

完全支持Unicode: 几乎所有支持 ASCII 的操作同时也支持 UNICODE,反之亦

然。

名称: OllyDbg 可以根据 Borland 和 Microsoft 格式的调试信息,显示输入/

输出符号及名称。Object 扫描器可以识别库函数。其中的名称和注释您可任意

添加。如果DLL中的某些函数是通过索引号输出的,则您可通过挂接输入库

[import library]来恢复原来的函数名称。不仅如此,OllyDbg还能识别大量

的常量符号名(如:窗口消息、错误代码、位域[bit fields]„)并能够解码

为已知的函数调用。

已知函数:OllyDbg 可以识别 2300 多个 C 和 Windows API 中的常用函数及其

使用的参数。您可以添加描述信息、预定义解码。您还可以在已知函数设定 Log

断点并可以对参数进行记录。

函数调用: OllyDbg 可以在没有调试信息或函数过程使用非标准的开始部分

[prolog]和结尾部分[epilog]的情况下,对递归调用进行回溯。

译者注:

004010D0 push ebp

004010D1 mov ebp,esp |

004010D3 sub esp,10h |prolog

004010D6 push ebx |

004010D7 push esi |

004010D8 push edi /

„„

004010C5 pop edi

004010C6 pop esi |

004010C7 pop ebx |epilog

004010C8 mov esp,ebp |

004010CA pop ebp |

004010CB ret /

栈:在栈窗口中,OllyDbg 能智能识别返回地址和栈框架[Stack Frames]。并

会留下一些先前的调用。如果程序停在已知函数上,堆栈窗口将会对其参数进行

分析解码。

译者注:栈框架[Stack Frames]是指一个内存区域,用于存放函数参数和局部

变量。

SEH 链: 跟踪栈并显示结构化异常句柄链。全部链会显示在一个单独的窗口中。

搜索:方法真是太多了!可精确、模糊搜索命令或命令序列,搜索常数,搜索黑

吧、文本字符串,搜索全部命令地址,搜索全部常量或地址域[address range],

搜索所有能跳到选定地址的跳转,搜索所有调用和被调用的函数,搜索所有参考