用于动态调试的工具;
1.1 布局、窗口分析
布局:
L Log 窗口
E Executable窗口
M Memory窗口
T Threads 窗口: 有时需要激活
W Window窗口
H Handle窗口
C CPU窗口 :汇编代码;
/ Patches 窗口
K CallStack 窗口
B BreakPoint窗口
R Reference窗口
… Run Trace窗口
S Source 窗口
汇编窗口:
反编译窗口: 虚拟地址、字节码、汇编、注释或者运行时值;
寄存器状态栏: 各个寄存器值状态;
信息面板窗口;当前 指令的参数值
数据面板窗口:内存数据;可改变现实方式;
堆栈面板窗口: esp,函数调用窗口;
1.2 开始使用及常见的快捷键
1.2.1 打开 open:原厂仪没有运行来,从最开始全程跟踪,主要是用来跟踪程序开始之前原厂仪作的一些准备;
1.2.2 附加 Attach:原厂仪运行起来了,从原厂仪运行的当前位置开始跟踪;
1.2.3 中断 :双击击字节码,颜色变红;
Alt + B:列出所有的断点
我们调试OD时,也常常使用NOP指令(0x90)将指令无效,或者修改寄存器得值,以测试特定的路径;
1.2.4 偏移地址:双击地址码,显示上下的偏移量;
1.2.5 单步:F8 运行:F9;
Ctrl + F8,连续步过;Ctrl + F7,连续步入;
使用ESC 或者 F12 或者遇到下一个断点 进行中断;
Ctrl + F9 : 运行到RET(0x4013C6)处,一般和F8 联合使用,调回当前函数的调用点的下一句;
Alt + F9是:调试界面回到当前EIP(当前运行命令)的位置;
- 减号是:回溯调用位置;
Ctrl + A : OD 重新分析;
1.2.6 步入:F7 如果存在导入表,则按两次F7;
1.2.7 查看内存:Follow in dump
1.2.8 OD显示运行状态表示,原厂仪在等待输入,OD显示是暂停状态表示已经中断下来了;
1.2.9 地址栏加标签:: 冒号
1.2.10 查找函数或者内存地址:Control + G
1.2.11 可执行模块:Alt + E (当前exe所关联的所有的DLL)
1.2.12 Ctrl+ N : 输入表窗口;
1.3 断点分类
执行断点:INT3:0xCC;F2;对数据的读写操作而已是无效的;
内存断点: 内存监视的断点;
硬件断点:寄存器断点,最多4个;
消息断点: Alt + W :Windows窗口;
条件断点:shift + F2
硬件断点:由CPU硬件支持的断点,使用DR0~DR3 调试地址寄存器,支持调试寄存器,最多只能有4个。(快,有限,支持有限个断点,)
软件断点:通过代码中设置特征值的方式实现(是硬件断点的补充,无限个软件断点)。
看技巧 《如何下条件断点》
1.4 寄存器
EAX:rep 每次初始化的内容、函数返回值存储、系统调用标号;
ECX:rep 循环的额次数;fastcall的第一个参数;
EDX:fastcall的第二个参数;
EBX:
ESP:永远指向存栈首地址
EBP:(extended base pointer拓展基址指针)堆栈操作时,实际操作的是ebp,通过ebp从堆栈中取得数据;正偏移是参数,负偏移是局部变量;
ESI:内测拷贝的源source;
EDI:内存拷贝的目的 Destination;
EIP:存当前运行命令的地址码
初学常见疑问:
1、网上下载的工具包中有:OllyICE.exe 和 OllyDBG.exe 的区别? 实质都是OD;
2、HawKOD.exe 和 ollydbg.exe 的区别,运行起来好像一样? 都是OD,只是HawKOD.exe 有各种插件,一般先用HawKOD.exe ,如果不行才用ollydab.exe;
3、如何确定附加的exe是我们需要跟踪的? 任务管理器查PID;
4、DWORD、byte、WORD 的字节数? 分别为4、1、2 ,和MFC中的是一样的;