另外,更快捷的找到以前执行指令的办法是Run跟踪[run trace]。它将创建一个执行协议并告知你指定指令的执行时间和次数
十五、Hit跟踪[Hittrace]
Hit跟踪能够让你辨别哪一部分代码执行了,哪一部分没有。OllyDbg的实现方法相当简单。它将选中区域的每一条命令处均设置一个INT3断点。当中断发生的时候,OllyDbg便把它去除掉,并把该命令标志为命中[hit]。因为每个跟踪断点只执行一次,所以这种方法速度非常快。
在使用Hit跟踪的时候,一定要注意不能在数据中设置断点,否则应用程序极有可能崩溃。因此,你必须打开相关的菜单选项,以进行代码分析[yze]。我推荐你选择严或启发式函数识别[strict or heuristical procedure recognition]。如果选择模糊[Fuzzy]的话,可能会产生很多难以容忍的错误,而且经常把本不是函数的代码段识别成函数。
只要你在模块中设置了跟踪断点,哪怕只设了一个,OllyDbg都会分配两倍于代码段大小的缓冲区。
注意:当你退出Hit跟踪的时候,Run跟踪也会同时退出。
十六、Run 跟踪[Run trace]
Run跟踪是一种反方向跟踪程序执行的方式,可以了解以前发生的事件。你还可以使用Run跟踪来了解运行的简单统计[profile]。基本上,OllyDbg是一步一步地执行被调试程序的,就像[animation]演示一样,但不会实时刷新窗口,最重要的是它能将地址、寄存器的内容、消息以及已知的操作数记录到Run跟踪缓冲区中。如果被调试的代码是自修改的,你就能够保存原始的命令。可以通过按CtrlF11(Run跟踪步入,进入子函数)或者 CtrlF12(Run跟踪步过,一次执行完子函数)开始Run跟踪,并用F12或者Esc键停止跟踪。
你可以指定在Run跟踪时执行每一步的条件集(快捷键:CtrlT)。如果条件符合,Run跟踪将暂停。条件包括:
(1)当EIP在某个地址范围内时暂停[Pause when EIP is in the address range];
(2)当EIP在某个地址范围之外时暂停[Pause when EIP is outside the address range];
(3)当某个条件为真时暂停[Pause when some conditionis true];
(4)当下一条指令可疑时暂停[Pause when next commandis suspicious],比如:可能为非法指令(根据在分析3[Analysis 3]中设定的规则而定),访问不存在的内存,设置了单步陷阱标志[single—step trap flag]或者越ESP界访问栈。注意:这个选项会明显地(大约20%)减慢Run跟踪的速度;
(5)当命令执行达到指定的次数(更确切的说,是添加到Run跟踪的缓冲区里面的命令数量)时暂停[Pause afterspecified number of commands is traced]。注意计数器不能自动归零。也就是说,如果你设置指令次数为10,则在第10次执行到该命令时暂停,并不是该命令每执行10次就暂停一次。
(6)当下一条命令符合指定的样式之一时暂停[Pause when nextcommand 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;第一条命令符合样式XORRA,RA;而等二条命令 XORESI,EDX 符合样式XOR RA,RB。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/ruanjian/article-41789-19.html
你不出名的话
竟然还能当教授
叫兽
xihuan