OllyDbg完全教程 断点[Breakpoints]

转载 2006年06月10日 08:53:00
九,断点[Breakpoints]

OllyDbg支持数种不同类型的断点:

- 一般断点[Ordinary breakpoint], 将您想中断的命令的第一个字节,用一个特殊命令INT3(调试器陷阱)来替代。您可以在反汇编窗口中选中要设断点的指令行并按下 F2 键就可以设定一个此类型的断点。也可以在快捷菜单中设置。再次按下 F2 键时,断点将被删除。注意,程序将在设断指令被执行之前中断下来。

INT3断点的设置数量是没有限制的。当您关闭被调试程序或者调试器的时候,OllyDbg将自动把这些断点保存到硬盘中,永远不要试图在数据段或者指令的中间设置这种断点,如果您试图在代码段以外设置断点,OllyDbg将会警告。您可以在安全选项[Security options]中永远关闭这个提示,在某些情况下调试器会插入自带的临时INT3
断点。

- 条件断点[Conditional breakpoint] (快捷键 Shift+F2) 是一个带有条件表达式的普通INT3断点。当调试器遇到这类断点时,它将计算表达式的值,如果结果非零或者表达式无效,将暂停被调试程序,当然,由条件为假的断点引起的开销是非常高的(主要归因于操作系统的反应时间)。在Windows NT、奔腾Ⅱ/450处理器环境下
OllyDbg每秒最多处理2500个条件为假的断点。条件断点的一个典型使用情况就是在Windows消息上设置断点(比如 WM_PAINT)。为此,您可以将伪变量 MSG 同适当的参数说明联合使用。如果窗口被激活,参考一下后面的消息断点描述。

- 条件记录断点 [Conditional logging breakpoint] (Shift+F4)是一种条件断点,每当遇到此类断点或者满足条件时,它将记录已知函数表达式或参数的值。例如,您可以在一些窗口过程函数上设置记录断点并列出对该函数的所有调用。或者只对接收到的WM_COMMAND消息标识符设断,或者对创建文件的函数(CreateFile)设断,并且记录以只读方式打开的文件名等,记录断点和条件断点速度相当,并且从记录窗口中浏览上百条消息要比按上百次F9轻松的多,您可以为表达式选择一个预先定义好的解释说明。

您可以设置通过的次数 - 每次符合暂停条件时,计数器就会减一。如果通过计数在减一前,不等于零,OllyDbg就会继续执行。如果一个循环执行100次(十进制),在循环体内设置一个断点,并设置通过次数为99(十进制)。OllyDbg将会在最后一次执行循环体时暂停。

另外,条件记录断点允许您传递一个或多个命令给插件[plugins]。例如,您需要使用命令行插件改变一个寄存器的内容,然后继续执行程序。

- 消息断点[Message breakpoint]和条件记录断点基本相同,除了OllyDbg会自动产生一个条件,这个条件允许在窗口过程的入口处设置某些消息(比如WM_PSINT)断点,您可以在窗口[Windows]中设置它。

- 跟踪断点[Trace breakpoint] 是在每个选中命令上设置的一种特殊的INT3断点。如果您设置了Hit跟踪[hit trace] ,断点会在命令执行后移除,并在该地址处做一个标记。如果您使用的是Run跟踪[run trace] ,OllyDbg会添加跟踪数据记录并且断点仍然是保持激活状态。

- 内存断点[Memory breakpoint] OllyDbg每一时刻只允许有一个内存断点。您可以在反汇编窗口、CPU窗口、数据窗口中选择一部分内存,然后使用快捷菜单设置内存断点。如果有以前的内存断点,将被自动删除。您有两个选择:在内存访问(读,写,执行)时中断,或内存写入时中断。设置此类断点时,OllyDbg将会改变所选部分的内存块的属性。在与80x86兼容的处理器上将会有4096字节的内存被分配并保护起来。即使您仅仅选择了一个字节,OllyDbg 也会将整个内存块都保护起来。这将会引起大量的错误警告,请小心使用此类断点。某些系统函数(特别是在Windows95/98下)在访问受保护的内存时不但不会产生调试事件反而会造成被调试程序的崩溃。

- 硬断点[Hardware breakpoint](仅在Windows ME,NT或2000下可用)在80x86兼容的处理器上,允许您设置4个硬件断点。和内存断点不同,硬件断点并不会降低执行速度,但是最多只能覆盖四个字节。在单步执行或者跟踪代码时,OllyDbg能够使用硬断点代替INT3断点。

- 内存访问一次性断点[Single-shot break on memory access] (仅在Windows NT或2000下可用)。您可以通过内存窗口的快捷菜单(或按F2),对整个内存块设置该类断点。当您想捕捉调用或返回到某个模块时,该类断点就显得特别有用。中断发生以后,断点将被删除。

- 暂停Run跟踪[Run trace pause] (快捷键:Ctrl+T)是在每一步Run跟踪[run trace] 时都要检查的一个条件集.您可以在EIP进入某个范围或超出某个范围时暂停,某个条件为真时暂停,或者命令与指定的模式匹配时暂停,或者当命令可疑的时候暂停。注意,这一选择会极大的(高达20%)降低Run跟踪的速度。

OllyDbg也可以在一些调试事件[debugging events]上暂停程序执行。比如加载或卸载DLL,启动或终止线程,或者程序发出调试字符串的时候。

10,数据窗口[Dump]
数据窗口用于显示内存或文件的内容。您可以从以下预处理格式[predefined formats]中选择一种显示方式:字节[byte]、文本[text]、整数[integer]、浮点数[float
]、地址[address],反汇编[disassembly]、 PE头[PE Header]。

所有的dump窗口支持备份[backup]、搜索和编辑操作。CPU 窗口[CPU window]的Dump面板允许您对可执行代码的数据和可执行文件(.exe,或.dll)的内存映射做如下操作:定义标签[labels]、设置 内存断点[memory breakpoints], 查找参考[references]。数据菜单[Dump menu]只显示与选中部分相关的命令。

如果 备份[backup]可用,则单击第一个列标题栏,会在地址[Address]/备份[Backup] 两种显示模式之间切换。点击其他列标题栏,会改变Dump模式。

像反汇编窗口一样,数据窗口也保存了大量查看内存地址的历史记录。您可以通过“+”和“-”键来访问您过去查看过的数据地址空间。

要翻动一字节的数据,可以按住Ctrl l键并按上/下方向键。

可执行模块窗口[Executable modules window]
可执行模块窗口(快捷键:Alt+E)列出了当前被调试进程加载的所有可执行模块。它也显示了很多有用的信息,比如模块大小、入口地址、模块版本、以及可执行文件路径等。一些信息,如以十进制显示的模块大小、入口地址的符号名、是否为系统模块等,通常是被隐藏的。如果想看,可以增加相应栏的宽度。快捷菜单支持以下操作:

刷新[Actualize] - 重新扫描模块并去除对新加载模块的高亮显示。在大多数情况下,OllyDbg会自动完成该操作。

查看内存[View memory] - 打开内存窗口,并定位到属于该模块镜像的第一个内存块处。

在CPU窗口中查看代码[View code in CPU] (快捷键:回车键) - 在反汇编窗口中显示模块的可执行代码。

跟进到入口[Follow entry] - 在反汇编窗口中跟进到模块的入口处。

在CPU窗口中查看数据[Dump data in CPU] -在CPU窗口的数据面板中显示模块的数据段。块代码段。

显示名称[View names] (快捷键:Ctrl+N) -显示当前模块定义或使用的全部名称[names](包括输出表、引入表、链接库、用户自定义)。

标记为系统DLL[Mark as system DLL],
标记为非系统DLL[Mark as non-system DLL] - 将选中模块标记为系统或非系统属性。如果设置为系统属性,则在Run跟踪[Run trace] 时会直接执行(不进行跟踪)这个模块,从而大大加快跟踪速度。默认情况下,所有驻留在系统目录(通常在Windows 95/98下为c:/windows/system ,在WinNT/2000/XP下为c:/winnt/system32)的模块都认为是系统模块。

立即更新.udd文件[Update .udd file now] -向文件“<模块名>.udd”写入模块相关的全部数据,udd文件保存了在调试期间设置的断点、标签、注释、监视、分析等信息。当模块卸载时OllyDbg会自动创建.udd文件。

查看可执行文件[View executable file] - 显示可执行文件的全部内容。

查看全部资源[View all resources] - 以列表形式显示模块定义的全部资源,并带有一个简短信息。OllyDbg并不把资源当作单独实体来支持。您可以提取[Dump]并以二进制的形式进行编辑。

查看资源字符串[View resource strings] -以列表形式显示资源字符串及其标识符。

查看Run跟踪的统计[View run trace profile] - 在此模块中计算统计[profile] 。相关信息:Run跟踪[Run trace].

分析全部模块[Analyze all modules] -允许同时分析全部模块。分析将从代码中提取大量的有用信息;代码经过分析后再进行调试,通常会非常快并且可靠。

鼠标双击某一行,将会在反汇编窗口中显示模块的执行代码。

OllyDbg中设置调试点的四种方法

有过Java或者其他语言开发经验的,都知道断点的概念。在我们测试程序时可以在需要的位置设置断点,这样当程序执行到断点时流程就会停止,此时我们可以查看变量、表达式等的值。 同样,在使用OllyDbg时...

动态链接库(DLL)总结---DLL三种调试(8)

DLL有三种调试方法:        方法1:                 如果动态链接库是自己编写的,并且测试代码也是自己编写的,那么此时我们可以将动态链接库和测试代码的工程建立在一起,在调试测...

ollydbg学习之断点篇

ollydbg中的断点分为软件断点(普通断点),内存断点,硬件断点,消息断点,条件断点等 每个程序都有一个原始入口点,称之为OEP 定位api函数实现代码方法: 1.先查找函数的内存地址,然后...

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

二十,单步执行与自动执行[Step-by-step execution and animation] 您可以通过按 F7(单步步入)或 F8(单步步过),对程序进行单步调试。这两个单步执行操作的...

[Android Studio 权威教程]断点调试和高级调试

有人说Android 的调试是最坑的,那我只能说是你不会用而已,我可以说Android Studio的调试是我见过最棒的。 好了开始写一个简单的调试程序,我们先来一个for循环 for (int i...

[Android Studio 权威教程]断点调试和高级调试

有人说Android 的调试是最坑的,那我只能说是你不会用而已,我可以说Android Studio的调试是我见过最棒的。 好了开始写一个简单的调试程序,我们先来一个for循环 for (int i...
  • Alpha58
  • Alpha58
  • 2017年02月12日 16:39
  • 311

[Android Studio 权威教程]断点调试和高级调试

原文地址 有人说Android 的调试是最坑的,那我只能说是你不会用而已,我可以说Android Studio的调试是我见过最棒的。 好了开始写一个简单的调试程序,我们先来...

[Android Studio 权威教程]断点调试和高级调试

好了开始写一个简单的调试程序,我们先来一个for循环 ? 1 2 3 4 5 6 7 8 for ...

[Android Studio 权威教程]断点调试和高级调试

好了开始写一个简单的调试程序,我们先来一个for循环 ? 1 2 3 4 5 6 7 8 for ...

OllyDbg 常用断点 完全教程

  • 2013年07月15日 00:46
  • 10KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OllyDbg完全教程 断点[Breakpoints]
举报原因:
原因补充:

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