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

转载 2006年06月10日 08:59:00

二十,单步执行与自动执行[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跟踪。



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

二十,单步执行与自动执行[Step-by-step execution and animation] 您可以通过按 F7(单步步入)或 F8(单步步过),对程序进行单步调试。这两个单步执行操作的...
  • laogaoAV
  • laogaoAV
  • 2013年03月19日 00:02
  • 4541

6.OD-Run trace /Hit trace

Run trace可以把被调试程序执行过的指令保存下来,了解以前发生的事件,它能把地址、寄存器的内容、消息等记录到Run trace缓冲区中,在运行Run trace前,要把缓冲区设置大些,否则执行的...
  • hgy413
  • hgy413
  • 2012年07月03日 16:55
  • 4639

Ollydbg hit跟踪 与Run 跟踪

Ollydbg hit跟踪   【添加选择部分】选项 就是用鼠标框选一段代码,运行程序后,在被选中的代码中,运行过的会被标记成红色   【添加函数过程】选项 就是鼠标光标落在其中的那个函数的代码会被...
  • kendyhj9999
  • kendyhj9999
  • 2013年06月18日 10:59
  • 1267

OD的hit跟踪和run跟踪

在OD的CPU窗里和查看菜单和调试菜单里面都可以看到相应的菜单,谈谈这些功能是干什么的。   1.hit跟踪是记录汇编指令运行脚印的,一个子程序可能会有很多跳转,这些跳转在程序实际运行中哪些跳转...
  • liujiayu2
  • liujiayu2
  • 2017年02月24日 22:41
  • 1105

hit 命中率

 1 BUFFER命中率也就是通常所说高速缓存的命中率,这个指标是指通过内存得到访问的数据和所有访问的数据之间的一个比例。正常指标范围:    Buffer命中率正常的指标为:90%-100%,但在数...
  • junmail
  • junmail
  • 2009年11月09日 23:55
  • 5346

微信hit push hold !!

微信hit push hold !! 原因是你分享的微信账号在其他手机登陆了,但是本机还没有退出登陆,导致没有权限分享。重新进入微信并登陆就好了。...
  • u011416077
  • u011416077
  • 2016年07月13日 11:23
  • 3887

Lucene 出现background merge hit exception异常解决方案

周末跑了两天采集,周一过来发现采集异常中断,查看异常日志: background merge hit exception: _19f:c301 _19g:c301 _19h:c301 _19i:c7...
  • rock870210
  • rock870210
  • 2012年03月26日 10:15
  • 2383

BUFFER CACHE之四:Cache Hit Ratio和缓冲池的问题

一、        命中率的影响因素:全表扫描,应用程序设计,随意查询大表,查询对象过于集中。二、        命中率不是buffer cache性能优化的重中之重:1.    设计糟糕的数...
  • DB_Wade
  • DB_Wade
  • 2010年08月19日 14:45
  • 5206

BufferKinfe绑定View的原理分析

Buffer Kinfe大家都很熟悉,用起来也很方便,那么BufferKinfe是怎么样一个实现的原理呢?我看了一下一些文章之后,理解了一下 首先是第一块,如何使用 一、环境配置 首先需要...
  • YANGDAHUAN
  • YANGDAHUAN
  • 2017年06月04日 16:27
  • 560

CACHE的Miss和Hit

1.L1 CACHE的Miss和Hit 1.1 Read Miss 见2.1。 1.2 Write Miss L1D是Read-allocate CACHE,意味着仅在发生Read Miss时...
  • shanghaiqianlun
  • shanghaiqianlun
  • 2011年11月07日 21:23
  • 12322
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OllyDbg完全教程 单步执行与自动执行[Step-by-step execution and animation] Hit跟踪[Hit trace]
举报原因:
原因补充:

(最多只允许输入30个字)