前言
接着本专栏上一节,我们虽然已经用上RadAsm进行编写x86汇编代码并编译运行,但是想进行断点调试怎么办。RadAsm里面找不到断点调试,下面我们来介绍如何在RadAsm上联合调试器OllyDBG进行调试代码。
OllyDBG的介绍与下载
OllyDBG 是一款功能强大的动态追踪工具,结合了 IDA 和 SoftICE 的优点,成为 Ring3 级调试器的佼佼者。其易用性和强大的插件扩展功能使其成为当今最流行的调试解密工具之一。OllyDBG 由德国开发者 Oleh Yuschuk 编写,我们简称OD。官方网址: http://www.ollydbg.de/
打开上面网址,在如上位置下载32位OllyDBG 软件。然后跳转到下面网页
在上面指示位置进行下载它的1.10版本,下载压缩包到本地并解压如下
立即打开会提示如下一些dll文件和当前系统不匹配,可以选择不用理会,点击否
第一次打开OllyDBG,界面布局很空,不用理会,直接关闭。
然后我们在RadAsm中配置OllyDBG,同样在Option->Set Paths设置
在如下Debug位置填入OllyDBG的文件夹位置
点击Apply应用后点击ok,完成设置。
然后我们打开上一节的第一个masm程序,编译链接成功后,按快捷键:Ctrl + D,打开 OD 进行动态调试改程序。
点击上面的OK,就可以打开 OD如下界面。
我们可以如下点击反汇编代码某一行,右键->Breakpoint->Toggle设置断点,或者直接点击所在位置按快捷键F2
按F9运行,到下面红色为止会暂停当前运行,按F8单步过操作两次就会运行至灰色位置
调试结束后,在 OD 中按快捷键:Alt + X,可以快速关闭 OD 程序。至此已经完成软件环境的搭建和成功调试代码。下面介绍一下OllyDBG的简单界面布局和使用
界面布局和功能简单介绍
重要术语
-
断点:程序执行过程中被中断的位置。中断会导致计算机暂停当前任务,转而执行其他任务,然后再返回原任务继续执行。
-
领空:程序自身代码所处的内存区域。
-
程序入口点 (OEP):程序开始运行时执行的第一条指令的地址。
-
反汇编窗口:显示被调试程序的反汇编代码。标题栏上的地址、HEX 数据、反汇编和注释可以通过右键菜单中的“界面选项”进行切换显示。
-
寄存器窗口:显示当前选定线程的 CPU 寄存器内容。点击“寄存器 (FPU)”标签可以切换寄存器显示方式。
-
信息窗口:显示反汇编窗口中选中的第一条命令的参数及跳转目标地址、字符串等信息。
-
数据窗口:显示内存或文件的内容。右键菜单可用于切换显示方式。
-
堆栈窗口:显示当前线程的堆栈。
其中的窗口细分如下:
对应的序号窗口简介如下:
1 汇编代码对应的地址窗口
2 汇编代码对应的十六进制机器码窗口
3 反汇编语句(语法表达式)
4 注释信息窗口(内存地址\ 十六进制(偏移值)\ 反汇编代码 \ 注释)
5 FPU寄存器信息
6 Flag军旗指向。你要在汇编里改那条跳转指令, 使程序执行到那里时执行同等你改Z flag的效果。 比如说把JMP改成jz, JZ改成nop等。
7 中转数据仓库地址
8 HEX二进制代码
9 文本ASC代码
10、11 堆栈窗口:显示ESP寄存器指向的信息(也是最重要的)
12 CUP执行情况反馈
14 直接输入汇编指令窗口
15 程序运行状态显示
16 快捷命令图标
17 程序运行、暂停、中止状态信息。
其中的按钮功能介绍如下
按钮1=F3,打开被调试的exe文件。
按钮2=CTRL+F2,重新加载被调试的程序。
按钮3=ALT+F2,关闭被测试的文件。
从左到右顺序,1=F9运行,2=F12暂停,3=F7单步入,4=F8单步过,5=CTRL+F11跟踪步入,6=CTRL+F12跟踪步过
7=CTRL+F9 执行到返回,8=转到反汇编窗口的地址
l : log 查看OD运行的日志信息
e :被调试exe程序所加载的所有模块的信息(加载基址,大小,入口(OEP),名称,版本,路径)
OEP:(Original Entry Point)
m :程序的内存映射视图(memory map)
t :线程信息
w :窗口windows信息
h :handles 句柄表
c :显示CPU窗口(反汇编窗口)ALT+c
/ :P,显示补丁(Patches)信息 CTRL+P
k :调用堆栈 ALT+K
b :软件断点列表 Alt+B
r :显示参考(数据引用等) references
... : RUN跟踪轨迹,run trace
s: 源码source显示窗口
OD常用快捷键
F2:断点,CTRL+F2 重加载程序!
F3 打开要操作的程序。
F4: 运行到光标处
F7: 单步
F8: 步过
F9: 运行,SHIFT+F9(次数为程序运行的次数-1次
Shift+F9 - 与F9相同,但是如果被调试程序发生异常而中止,调试器会首先尝试执行被调试程序指定的异常处理(请参考忽略Kernel32中的内存非法访问)。
Ctrl+F9 - 执行直到返回,跟踪程序直到遇到返回,在此期间不进入子函数也不更新CPU数据。因为程序是一条一条命令执行的,所以速度可能会慢一些。按Esc键,可以停止跟踪。
Alt+F9 - 执行直到返回到用户代码段,跟踪程序直到指令所属于的模块不在系统目录中,在此期间不进入子函数也不更新CPU数据。因为程序是一条一条执行的,所以速度可能会慢一些。按Esc键,可以停止跟踪。
Ctrl+A :分析代码(函数,参数...)
Ctrl+G : 跳转到
Ctrl+X : 复制地址
Ctrl+E :修改内存
Ctrl+B :二进制搜索
Ctrl+F :指令搜索(单条指令)
Ctrl+S :指令搜索(多条指令)
Ctrl+F12: 重启调试
Ctrl+Shift+x :复制二进制数据
常用查找
函数名查找,反汇编窗口鼠标右键
字符串查找 ,反汇编窗口鼠标右键
其他详细教程可以参考看雪网站