OllyDbg完全教程 单步执行与自动执行[Step-by-step execution and animation] Hit跟踪[Hit trace]

二十,单步执行与自动执行[Step-by-step execution and animation]

您可以通过按 F7(单步步入)或 F8(单步步过),对程序进行单步调试。这两个单步执行操作的主要区别在于:如果当前的命令是一个子函数,按F7,将会进入子函数,并停在子函数的第一条命令上;而按 F8,将会一次运行完这个子函数。如果您单步步过的子函数中含有断点或其他调试事件,执行将会被暂停,但 OllyDbg 会在子函数的后一条命令上,自动下一个断点,而这个断点您迟早会碰到。

如果被调试程序停在异常上,您可以跳过它,并转到被调试程序建立的句柄处。只需简单的 Shift 键和任何一个单步命令。

如果需要连续按F7、F8键上百次,您可以使用自动执行(Ctrl+F7或者Ctrl+F8)功能。在这种情况下,OllyDbg 将自动重复F7或者F8操作,并且实时更新所有的窗口。这个过程会在下面情况停止:


- 按 Esc 键或发出任何单步命令

- OllyDbg 遇到断点

- 被调试程序发生异常

使用“+”和“-”按键,可以回朔以前的执行历史[execution history].

注意:当执行停止时 OllyDbg 将会刷新大部分窗口。如果动态执行过程非常慢,可以尝试关掉或最小化没有用的窗口。

另外,更快捷的找到以前执行指令的办法是Run跟踪[run trace]。它将创建一个执行协议并告知您指定指令的执行时间和次数
 

 

 

 

二一,Hit跟踪[Hit trace]

Hit跟踪能够让您辨别哪一部分代码执行了,哪一部分没有。OllyDbg的实现方法相当简单。它将选中区域的每一条命令处均设置一个INT3断点。当中断发生的时候,OllyDbg便把它去除掉,并把该命令标志为命中[hit]。因为每个跟踪断点只执行一次,所以这种方法速度非常快。

在使用Hit跟踪的时候,一定要注意不能在数据中设置断点,否则应用程序极有可能崩溃。因此,您必须打开相关的菜单选项,以进行代码分析[analyze]。我推荐您选择严格或启发式函数识别[strict or heuristical procedure recognition]。如果选择模糊[Fuzzy]的话,可能会产生很多难以容忍的错误,而且经常把本不是函数的代码段识别成函数。

只要您在模块中设置了跟踪断点,哪怕只设了一个,OllyDbg都会分配两倍于代码段大小的缓冲区。 

注意:当您退出Hit跟踪的时候,Run跟踪也会同时退出。

Run 跟踪[Run trace]
Run跟踪是一种反方向跟踪程序执行的方式,可以了解以前发生的事件。您还可以使用Run跟踪来了解运行的简单统计[profile]。基本上,OllyDbg 是一步一步地执行被调试程序的,就像动画[animation]演示一样,但不会实时刷新窗口,最重要的是它能将地址、寄存器的内容、消息以及已知的操作数记录到Run跟踪缓冲区中。如果被调试的代码是自修改的,您就能够保存原始的命令。可以通过按Ctrl+F11(Run跟踪步入,进入子函数)或者Ctrl+F12(Run跟踪步过,一次执行完子函数)开始Run跟踪,并用F12或者Esc键停止跟踪。

您可以指定在Run跟踪时执行每一步的条件集(快捷键:Ctrl+T)。如果条件符合,Run跟踪将暂停。条件包括:


?当EIP在某个地址范围内时暂停[Pause when EIP is in the address range];
?当EIP在某个地址范围之外时暂停[Pause when EIP is outside the address range];
?当某个条件为真时暂停[Pause when some condition is true];
?当下一条指令可疑时暂停[Pause when next command is suspicious],比如: 可能为非法指令(根据在分析3[Analysis 3]中设定的规则而定),访问不存在的内存,设置了单步陷阱标志[single-step trap flag]或者越ESP界访问栈。注意这个选项会明显地(大约20%)减慢Run跟踪的速度;

?当命令执行达到指定的次数(更确切的说,是添加到Run跟踪的缓冲区里面的命令数量)时暂停[Pause after specified number of commands is traced]。注意计数器不能自动归零。也就是说,如果您设置指令次数为10,则在第10次执行到该命令时暂停,并不是该命令每执行10次就暂停一次。

?当下一条命令符合指定的样式之一时暂停[Pause when next command matches one of the specified patterns]。您可以使用模糊命令和操作数[imprecise commands and operands]及匹配32位寄存器RA和RB,像R32一样,这两个寄存器可以替代任何通用32位寄存器,但是在同一条命令中其值是不能变的。而 RA 和 RB 
在同一条命令中,则一定是不同的。例如,在程序中含有 XOR EAX,EAX; XOR ESI,EDX 两条命令,两条命令均符合样式 XOR R32,R32;第一条命令符合样式XOR RA,RA
;而等二条命令 XOR ESI,EDX 符合样式XOR RA,RB。

毫无疑问,Run跟踪需要足够的内存,每条命令平均需要占用16到35字节,同时速度也非常慢。在500-MHZ处理器、Windows NT环境下,它每秒能跟踪5000条指令。
Windows95更慢:每秒钟仅2200条指令。但是在许多情况下,例如当一个程序跳转到不存在的地址的时候,这是找到原因的唯一方法。您可以在Run跟踪时将准线性命令序列(即序列尾部只有唯一出口)跳过。当OllyDbg遇到这些需跳过的命令序列时,会设置一个临时断点,然后跟进到序列中,并一次运行完。当然了,如果排除命令中返回或跳转的地址在跟踪范围之外,将可能导致跟踪发生错误;因此OllyDbg会检查您想跳过的代码块,如果存在上述情况,会向您询问。

在大多数情况下,您对跟踪系统API代码不感兴趣。跟踪选项总是跟过系统DLL[Always trace over system DLLs]允许您在 跟踪/自动 模式下跟过API函数。如果模块在系统目录下,OllyDbg就假设该模块是系统的。您可以在模块[Modules]窗口中标记任意DLL是系统的或者非系统的。

为了使执行速度更快,您可以通过设置Run跟踪断点,先将Run跟踪限制在选定的命令或代码块上,然后再运行程序。我把这种做法称作“强迫Run跟踪”。一般来说,删除Run跟踪断点不会移除Hit跟踪断点。但如果您删除了hit跟踪断点,同时您也移除了Run跟踪断点。


跟踪命令会保存到跟踪缓冲区中,这个缓冲区在跟踪开始时自动创建。您可以在选项中指定它的大小(最高64MB)。这个缓冲区是循环队列,当满了的时候,会丢弃老的记录。

您可以通过从OllyDbg主菜单中选择“调试[Debug]|打开或者清除Run跟踪[Open or clear run trace]”,来打开或者清除Run跟踪缓冲区。在Run跟踪缓冲区打开后,
OllyDbg 会记录在执行过程中的所有暂停,甚至那些不是由Run跟踪引起的暂停。例如,您可以通过按 F7 或者 F8 单步执行程序,然后通过使用+键和-键来反方向跟踪程序的执行。注意:如果Run跟踪缓冲区已经关闭,则用这些键浏览的是历史[history]记录。在您查看Run跟踪记录时,寄存器和信息面板会变灰,来强调它们所显示的寄存器并不是实际的寄存器。跟踪缓冲区并不保存栈顶或由寄存器所指向的内容。寄存器、信息和栈在Run跟踪的时候使用实际的内存状态来解释寄存器的变化。

OllyDbg能够记下每个指令在Run跟踪缓冲区里面出现的次数。在反汇编窗口快捷菜单中,选择是“查看[View]|统计作为注释[Profile as comments]”。这个命令使用统计取代了注释栏。或者,如果列标题栏可见,则可以单击它几次直到它显示统计信息。注意显示出来的数字是动态的,而且不计算已经从跟踪缓冲区中丢弃的指令。您还可以在单独的统计窗口[Profile window]中,按触发次数排序,来查看整个模块的统计数据。

在反汇编窗口的快捷菜单中选择“Run跟踪[Run trace]|添加到所有函数入口处[Add entries of all procedures]”,这样能够检查每个可识别的函数被调用的次数。另一个命令“Run跟踪[Run trace]|添加到函数中所有的分支[Add branches in procedure]”会强行跟踪此函数中所有识别的跳转目的地址的内容。在这种情况下,统计功能能够找到最频繁执行的分支,您可以优化这部分的代码,以提高速度。

在反汇编窗口中的某条命令上使用快捷菜单中选择“搜索[Search for]|Run跟踪的最新记录[Last record in run trace]”用于查找该命令是否被执行过,如果执行过,最后一次执行在哪里。


Run跟踪窗口显示跟踪缓冲区的内容。对每个指令来说包括被指令改变的整数寄存器的内容(更准确的说是给定的记录变成下一条记录的变化)。如果您双击某条指令,窗口会选择在跟踪缓冲区里全部含有该命令的记录,而且您可以通过按+和-键来快速的浏览;如果您在调试选项[Debugging options]中设置了 “跟踪[Trace]|同步CPU和
Run跟踪[Synchronize CPU and Run trace]”,双击记录则会跟进到对应的反汇编窗口中位置。

注意:当您退出Hit跟踪时,您同时也强行退出了Run跟踪。
 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ollydbg 是一款常用的反汇编工具,可用于逆向工程、漏洞分析、代码调试等多种方面。以下是 ollydbg 入门教程: 1. 安装:下载 ollydbg 安装包,运行安装程序,选择安装目录并完成安装。 2. 打开程序:双击 ollydbg 图标,打开软件程序。 3. 加载程序:在 ollydbg 菜单栏中选择“文件”,再选择“打开”,在弹出的窗口中选择要加载的程序文件。选择后,自动跳转到 ollydbg 界面中,并显示程序的汇编代码。 4. 查看代码:在 ollydbg 界面中,可以看到程序的汇编代码。可以使用鼠标或键盘移动光标查看代码的不同部分。根据需要,可以使用缩放功能来调整代码的显示大小。 5. 断点调试:在 ollydbg 中设置断点可以使程序在指定位置暂停执行。在代码区选择要加断点的行,然后右键单击选择“Toggle breakpoint”,或者使用快捷键 F2 设置断点。运行程序,程序会在断点位置停止执行,可以查看暂停时代码和特定的寄存器的值。 6. 修改代码:在 ollydbg 中可以修改程序的汇编代码来调试程序。在代码区选择要修改的指令,右键选择“Assemble…”,在弹出的对话框中编辑新指令,然后点击“OK”按钮以保存修改。 7. 查看内存:在 ollydbg 中可以查看程序运行时的内存情况,包括栈、堆、数据段、代码段等。打开“Memory”选项卡,可以查看指定内存地址的十六进制数据和 ASCII 码。 总之,以上是 ollydbg 入门教程的基本步骤,可以帮助初学者快速熟悉使用该工具,实现程序逆向工程、漏洞分析、代码调试等目的。 ### 回答2: ollydbg是一款非常棒的调试器,是逆向工程和二进制分析的必备工具之一。如果您想了解并使用ollydbg,请按照以下步骤入门: 1. 下载并安装ollydbg:您可以从ollydbg官方网站(http://www.ollydbg.de/)上下载ollydbg。安装过程非常简单,您只需要按照步骤操作即可。 2. 打开基本的可执行文件:在ollydbg中打开最简单的可执行文件,您可以按F3或者将可执行文件拖拽到ollydbg窗口中。在打开的可执行文件中,您可以看到汇编代码,堆栈以及寄存器值等信息。 3. 设置断点:当您想要查找某个函数或查看程序的执行情况时,可以在代码中设置断点。只需在相应的行上单击左侧的空白处即可设置断点。 4. 调试程序:在运行时,当程序达到断点位置时,程序就会停止,您可以选择单步执行或连续执行程序。在每个步骤中,您都可以查看程序的寄存器和内存值,以便理解程序的执行流程。 5. 可视化调试:ollydbg也提供了一些可视化调试工具,如内存映射和反汇编窗口,这会让您更容易地查看和理解程序的执行流程。 综上所述,ollydbg是非常有用的工具,简单易用且提供了丰富的调试功能,但您需要通过不断地练习和试错来掌握这个工具。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值