目录
预备知识
1.断点
断点,是调试器的核心功能之一,可以让程序中断在需要的地方,从而方便调试器对程序进行跟踪与分析。调试器对断点有记忆功能,可以在一次调试中设置断点,下一次可以让程序自动运行到上一次设置断点的位置中断下来。
调试器的断点功能是为了方便程序员调试程序,以检测程序的逻辑完整性和功能完整性。比如在几百行的程序源代码中,编译运行的过程中出错了,如何快速定位到源代码中的错误代码,此时可以通过程序员手工查找;但是在实际的工程项目中,源代码动不动就是成千上万行的,这时如果出错,手工定位错误代码就太耗时耗力了,因此需要借助调试器来定位错误代码。
常用的断点包括:INT3断点、条件断点、消息断点、内存断点、硬件断点等。
2.INT3断点
这是在OD中最常用的断点类型,通过快捷键F2即可在相应代码处设置INT3型断点。INT3断点将代码的第一个字节,用一个特殊命令INT3(调试器陷阱标志,十六进制表示为0xCC)来替代。可以在反汇编窗口中选中要设断点的指令行并通过快捷键F2就可以设定一个此类型的断点。也可以在快捷菜单中设置其他快捷键。当再次按下F2键时,断点将被删除。注意,程序将在设断指令被执行之前中断下来。
INT3断点的设置数量是没有限制的。当关闭被调试程序或者调试器的时候,OD将自动把这些断点保存到硬盘中,最好不要在数据段或者指令的中间设置这种断点,如果在代码段以外设置断点,OD将会给出一个警告。可以在安全选项[Security options]中永远关闭这个提示,在某些情况下调试器会插入自带的临时INT3断点。
3.内存断点
OD每一时刻只允许有一个内存断点。可以在反汇编窗口、CPU窗口、数据窗口中选择一部分内存,然后使用快捷菜单设置内存断点。如果有以前的内存断点,将被自动删除。可以有两个选择:在内存访问(读,写,执行)时中断,或内存写入时中断。设置此类断点时,OD将会改变所选部分的内存块的属性。在与80x86兼容的处理器上将会有4096字节的内存被分配并保护起来。即使仅仅选择了一个字节,OD也会将整个内存块都保护起来。这将会引起大量的错误警告,请小心使用此类断点。某些系统函数(特别是在Windows95/98下)在访问受保护的内存时不但不会产生调试事件反而会造成被调试程序的崩溃。
4.硬件断点
(仅在Windows ME,