汇编入门---OllyDbg使用方法介绍
1. 主窗口界面
反汇编面板:
- 被调试程序在反汇编后显示在该面板窗口中,显示的信息分为四列,从左到右依次为:地址、数据、反汇编代码和注释
- 主要关注的是反汇编代码列,该列将指令以汇编代码的形式显示,从而让用户在汇编层次上对程序进行调试
寄存器面板窗口:
- 该窗口将程序运行时用到的寄存器的值都列了出来,其中寄存器的值发生变化时颜色会变为红色
堆栈面板窗口:
- 该窗口显示的是程序执行时的堆栈信息,左边一列是堆栈地址,右边一列是该地址存放的数据
数据面板窗口:
- 该窗口以十六进制和字符串的形式显示程序在内存中的数据
信息面板窗口:
- 在调试跟踪时,该窗口显示与指令相关的寄存器值、API函数调用提示和跳转提示等信息
2.开始调试
2.1 打开方式
一般有两种打开方式
- 第一种:依次点击File->open,选择待调试的程序,若程序执行时需要输入参数,则可以在Arguments栏填入
- 第二种:附加到正在执行的进程,依次点击File->Attach,选择需要调试的进行即可。
2.2 设置断点
2.2.1 INT3断点
- 断点的一种,快捷键是F2,一种常用的断点类型
- INT3指令的机器码为CC。当被调试进程执行INT3指令导致一个异常时,调试器就会捕捉这个异常从而停在断点处,然后将断点处的指令恢复成原来的指令
优点:
- 可以设置无数个断点
缺点:
- 改变了原程序指令,容易被软件检测到。
2.2.2 硬件断点
- 由硬件提供的调试寄存器组,可以对这些硬件寄存器设置相应的值,然后让硬件帮我们断在需要下断点的地址
- 设置方法:依次点击Breakpoint --> Hardware on execution
- 取消断点:依次点击:Debug --> Hardware breakpoints,然后在弹出的窗口中删除硬件断点(或者Breakpoint --> Remove Hardware breakpoints )
优点:
- 速度快,在INT3断点容易被发现的地方使用硬件断点代替会有很好的效果
缺点:
- 最多只能设置4个断点
2.2.3 内存断点
- 修改内存访问属性来触发内存访问错误而设置的断点称为内存断点
- 设置断点:鼠标右键并依次点击:Breakpoint --> Memory, on access/Memory,on write。
2.3 跟踪运行
ollydbg快捷键 | 功能 |
---|---|
F4 | 运行到指定地址 |
F7 | 单步步进,遇到CALL跟进 |
F8 | 单步步过,遇到CALL跳过 |
F9 | 运行程序 |
Ctrl+F9 | 遇到第一个RET指令时中断 |
2.4 地址跳转
- 按下快捷键Ctrl+G可以直接跳转到对应的地址处
- 如果要查看某个地址的数据 ,那么点击一下数据窗口,然后按下快捷键便可跳转到对应地址
- 同理,如果要 查看汇编代码或是堆栈数据,采用同样的操作即可
- 执行Go to命令,打开一个Enter expression to follow(对话框),输入地址,单击OK按钮
2.5 堆栈相关操作
- 堆栈区显示的数据总是从栈顶指针ESP处显示
- 选择Address ->Relative to ESP(子菜单一般只显示上面4个种的3个,根据需要动态变化),这时堆栈窗口就以ESP为指引,显示你想要的数据
- 随着程序单步执行时(F7或F8),窗口中的ESP总是滚动的,总是将栈顶置于顶部
- 在观察某个地址处数据的变动时会不方便,如果你不想滚动,而是想观察某个位置上的堆栈值,这时可以使用Lock Stack来锁定滚动。
ps:博主正在学习汇编当中,会在之后更新更详细的OD使用经验和汇编知识