od粗跟踪和run跟踪

一、单步进入(F7)遇见CALL就进!进入该子程!行话:"跟进去"

单步跳过(F8)遇见CALL不进去!不去管子程的内部!第一次粗跟的时候常用!

执行到返回(ALT+F9)就是执行到该子程的返回语句!

单步执行与自动执行[Step-by-stepexecutionandanimation]

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

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

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

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

-OllyDbg遇到断点

-被调试程序发生异常

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

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

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

二、Run跟踪[Runtrace]

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

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

?当EIP在某个地址范围内时暂停[PausewhenEIPisintheaddressrange];

?当EIP在某个地址范围之外时暂停[PausewhenEIPisoutsidetheaddressrange];

?当某个条件为真时暂停[Pausewhensomeconditionistrue];

?当下一条指令可疑时暂停[Pausewhennextcommandissuspicious],比如:可能为非法指令(根据在分析3[Analysis3]中设定的规则而定),访问不存在的内存,设置了单步陷阱标志[single-steptrapflag]或者越ESP界访问栈。注意这个选项会明显地(大约20%)减慢Run跟踪的速度;

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

当下一条命令符合指定的样式之一时暂停[Pausewhennextcommandmatchesoneofthespecifiedpatterns]。您可以使用模糊命令和操作数[imprecisecommandsandoperands]及匹配32位寄存器RA和RB,像R32一样,这两个寄存器可以替代任何通用32位寄存器,但是在同一条命令中其值是不能变的。而RA和RB

在同一条命令中,则一定是不同的。例如,在程序中含有XOREAX,EAX;XORESI,EDX两条命令,两条命令均符合样式XORR32,R32;第一条命令符合样式XORRA,RA

;而等二条命令XORESI,EDX符合样式XORRA,RB。

毫无疑问,Run跟踪需要足够的内存,每条命令平均需要占用16到35字节,同时速度也非常慢。在500-MHZ处理器、WindowsNT环境下,它每秒能跟踪5000条指令。

Windows95更慢:每秒钟仅2200条指令。但是在许多情况下,例如当一个程序跳转到不存在的地址的时候,这是找到原因的唯一方法。您可以在Run跟踪时将准线性命令序列(即序列尾部只有唯一出口)跳过。当OllyDbg遇到这些需跳过的命令序列时,会设置一个临时断点,然后跟进到序列中,并一次运行完。当然了,如果排除命令中返回或跳转的地址在跟踪范围之外,将可能导致跟踪发生错误;因此OllyDbg会检查您想跳过的代码块,如果存在上述情况,会向您询问。

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

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

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

您可以通过从OllyDbg主菜单中选择“调试[Debug]|打开或者清除Run跟踪[Openorclearruntrace]”,来打开或者清除Run跟踪缓冲区。在Run跟踪缓冲区打开后,

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

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

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

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

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

Run跟踪[SynchronizeCPUandRuntrace]”,双击记录则会跟进到对应的反汇编窗口中位置。

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值