1、OD的CPU窗口
打开OD。OD的默认主界面是CPU窗口。CPU窗口由5个子窗口(面板)组成,分别是反汇编窗口,信息窗口,寄存器窗口,数据窗口,堆栈窗口。没有载入程序时,所有窗口都是空的。
通过OD菜单——>文件——>打开(或者快捷键F3)选择一个可执行程序文件(EXE、COM、DLL文件都可以)打开,可以看到OD加载可执行程序时的界面状态。
【1】CPU窗口中的反汇编窗口用于被调试程序的代码。它有四个栏:地址栏(address)、十六进制数据栏(hex dump)、反汇编代码栏(disassembled commands)、注释栏(comments)。最后一栏可以改变显示模式为:相关源代码或运行统计(run profile),如果列标题栏可见的话,点列标题栏就可以改变显示模式。
地址栏[Address] - 显示距双击地址处的相对地址。再次双击基地址,则恢复为标准地址显示模式;
十六进制数据栏[Hex dump] - 设置或取消非条件断点;
反汇编栏[Disassembly] - 调用汇编器,修改命令;
注释栏[Comment] - 增加或修改与命令相关的注释。
【2】CPU窗口中的信息窗口用于解码反汇编窗口中选中的第一个命令的参数,信息窗口也会显示隐含的参数。
【3】CPU窗口中的数据窗口用于显示内存或文件的内容。可以从以下预处理格式中选择一种显示方式:字节[byte]、文本[text]、整数[integer]、浮点数[float]、地址[address],反汇编[disassembly]、PE头[PE Header]。
【4】CPU窗口中的寄存器窗口用于显示和解释当前所选线程的CPU寄存器中的内容。该窗口同样允许修改寄存器,并可以跟进地址到其它CPU窗口。
【5】CPU窗口的堆栈窗口用于显示当前线程的堆栈。当被调试程序暂停运行时,堆栈窗口一般会自动滚动将当前ESP指向的地址放在窗口的第一条。并且这个地址被高亮显示。在某些情况下禁止滚动会更方便一些,可以通过在堆栈窗口右键单击[锁定堆栈]来禁止堆栈自动滚动。
2. 熟悉OD的其他窗口
OD默认主界面是CPU窗口,因为在实际调试程序的过程中,用的最多的是CPU窗口,其他的许多窗口是辅助作用但是也非常实用。用OD打开测试程序后,通过菜单->查看->可执行模块,打开可执行模块窗口(快捷键ALT+E)可以查看程序的模块调用信息。
其他的窗口还有,记录数据窗口(L)、内存映射窗口(M)、线程窗口(T)、窗口面板(W)、句柄窗口(H)、补丁窗口(/)、调用堆栈窗口(K)、断点窗口(B)、参考窗口(R)、RUN跟踪窗口(…)、源码窗口(S)。
3.使用OD开始调试
在用OD打开程序时,OD只是载入程序,并没有开始调试程序。在OD最右下角(堆栈窗口右下面)有一个黄色的状态提示窗,若显示为“暂停”,则表示OD处于暂停状态(例如程序尚未运行或者运行到断点位置)。此时,可以单击快捷菜单F9或者打开菜单[调试] – [运行]来运行程序。
用OD调试程序时,经常交换使用F7/F8/F9快捷键。其中F7表示[单步步入](遇到子函数时跟进到子函数内部,并停在子函数的第一条命令上),F8表示[单步步过](遇到子函数时直接运行完子函数),F9表示[运行]。
在运行程序之后,可能会有程序异常导致程序中断。此时根据OD左下角的提示窗口信息可能需要Shift+F7/F8/F9来忽略异常继续执行程序。使用快捷键F9或者Shift+F9直到Test.exe程序入口点,此时OD的左下角信息提示窗口提示[程序入口点],表示已经运行到Test.exe的真实入口点。
继续使用快捷键F9运行程序,观察在不设置断点的情况下,OD调试器进入到Test.exe程序主界面的运行状态。如下:
单击Test.exe主界面的[Close]按钮,观察Test.exe程序终止时OD的运行状态。
4、常用OD设置
OD调试器提供了非常多的调试设置选项。
打开OD菜单-[选项]-[界面],设置OD的外观。包含字体,颜色,代码高亮等设置,其中目录的UDD路径提供了OD默认保存的修改过的调试程序和备份用的调试程序,插件路径提供了OD的插件存放的路径。.\表示OD主程序所在目录的当前绝对路径。.\UDD即表示OD当前目录的UDD目录下。
5.常用OD快捷键
OD的快捷键相当丰富,经常用到的也不过那么十几个。
(1) Enter(回车键):将选中的命令添加到命令历史[command history]中,如果当前命令是一个跳转、函数或者是转换表的一个部分,则进入到目的地址;
(2) F2:在CPU窗口的反汇编窗口中,在选择的命令上开关INT3断点[Breakpoint],也可以双击该行第二列[HEX数据];
(3) F7:表示[单步步入](遇到子函数时跟进到子函数内部,并停在子函数的第一条命令上);
(4) F8:表示[单步步过](遇到子函数时直接运行完子函数);
(5) F9:表示[运行],在遇到断点后可以单击F9继续运行程序;
(6) Shift+F7/F8/F9:忽略异常,继续运行程序;
(7) Ctrl+F2:重新载入调试程序;
(8) Alt+F2:关闭调试程序;
(9) 空格键:汇编代码修改。可在CPU窗口中的反汇编窗口中以汇编代码修改实际代码或输入新代码,也可以在想要修改的代码处双击鼠标;
(10) Alt+B/C/E/K/L/M:显示断点窗口/CPU窗口/模块窗口/调用栈窗口/日志窗口/内存窗口;
(11) Alt+X:关闭OD;
(12) Ctrl+B:二进制(十六进制)搜索;
(13) Ctrl+E:二进制(十六进制)编辑所选内容;