常用快捷键

F2: 设置断点

F7: 单步跳入

F8: 单步跳过

Ctrl+F7: 可视化反复单步跳入

Ctrl+F8: 可视化反复单步跳过

Ctrl+F11: 不可视反复单步跳入

Ctrl+F12: 不可视反复单步跳过

F9: 跳出(?)

F4: 运行到光标处

Ctrl+N: 打开动态链接库的函数表(导入表)

​ 此时就可以输入函数名来查找,找到后回车即可跳转到代码.

Alt+M: 查看内存

Alt+L: 打开"Log data"窗口

界面按钮

image-20240309141444837

C按钮

反汇编面板的光标定位到当前的IP指针处.

B按钮

打开断点窗口,查看断点明细

W按钮

列出窗口相关的参数.

常用断点

INT 3-软中断

该指令机器码为0xCC,因此也常被称为"CC指令",被调试进程执行到INT 3指令时导致一个异常时,调试器就会捕获该异常,从而停在断点处,然后将断点处的指令恢复成原来的指令.

优点是可以下无数个断点.

缺点是改变了机器码,容易被检测到,例如有些软件会检测API的首地址是否为0xCC,以此来判断是否被下断点.

用C语言来检测的话,方法是:取得检测函数的地址,然后读取其第一个字节,判断是否为0xCC.

躲过检测的方法是将断点设在函数内部或末尾.

硬件断点

硬件断点和DRx调试寄存器有关:

image-20240309145150922

DRx调试寄存器共有8个(DR0~DR7),区别如下:

  • DR0~DR7: 调试地址寄存器,用于保存需要监视的地址,例如设置硬件断点.
  • DR4~DR5: 保留,未公开具体用途.
  • DR6: 调试寄存器组状态寄存器.
  • DR7: 调试寄存器组控制寄存器.

所以最多可以设置4个硬件断点.

内存断点

原理是将指定地址赋予不可访问/不可写属性来引发异常,OD截取该异常后检查是否为断点地址,如果是则进行中断.

消息断点

Windows本身是消息驱动的,可以尝试使用消息断点,使用W按钮打开窗口信息,选择需要的条目(例如"Button"),然后在弹出界面的菜单中选择需要的消息即可.

条件断点

可以使用一些条件来设置断点,例如寄存器条件,存储器条件

插件使用

CmdBar

image-20240313004936313

常用指令如下:

image-20240313004959547