常见调试器

        “工欲善其事,必先利其器”。在进行软件调试或者逆向工程时,我们需要很多辅助工具,其中调试器是最重要的工具之一。 


        根据调试对象调试器分类为用户态和内核态。用户态调试器只能调试环3(Ring3)权限的应用程序,大多数应用程序均属于此类程序。内核态调试器能调试环0(Ring0)权限的应用程序,驱动和操作系统内核均属于此类程序,当然环3权限的程序也可以调试,只是不方便。

        目前常见的用户态调试器为:OllyDBG、WinDBG、GDB和IDE自身集成的调试器。内核态调试器为:SoftICE、SyserDBG、WinDBG、GDB。


        根据调试器的实现调试器分类为硬件支持和系统支持。硬件支持调试器是通过硬件支持来实现调试功能,而系统支持调试器是通过操作系统的支持(系统API)来提供调试功能。对于硬件支持调试器而言,在系统缺陷或者系统被篡改等原因下导致系统支持调试器无法正常工作时,硬件支持调试器仍然能很好的完成调试工作。另外对于逆向工程来说常见的反调试手段都是基于操作系统支持来进行的,所以硬件支持调试器一般不容易被反调试手段发现,从而具备很好的隐秘性。但硬件支持调试器的缺点是受硬件支持影响,一般在功能实现方面没系统支持调试器强大。

        根据调试方法也可以划分为静态调试和动态调试。静态调试器包含反汇编器功能是通过对程序文件进行反编译来进行分析调试。动态调试是通过对运行时的程序进行跟踪从而进行分析调试。静态调试一般运用于逆向工程,通常用来逆向分析程序结构和程序算法,比较有名的静态调试器莫过于IDA,还有一些功能简单的反汇编器如W32dsm。对于大多数软件开发人员,他们调试程序时都是动态调试,这样能更直观有效的排错。但对于逆向工程来说,动态调试也是必不可少的,从庞大的应用程序中找到关键代码并不是一件容易的事,通过动态调试通常可以很快的定位到关键代码。比较有名的动态调试器则是OllyDBG。


        另外,Windows平台下SoftICE早已停止开发,OllyDBG是逆向工程的首选,WinDBG功能强大适合调试驱动和专业测试。Linux平台下GDB对于各种应用都是比较好的选择。ImmunityDBG调试器其实是对OllyDBG的二次开发。市面上基于VT技术(虚拟化技术)的调试器隶属于硬件支持调试器,这是比较前沿的技术。随着硬件虚拟化的普及,开发基于硬件的调试器显得更为容易,很多研究操作系统内核和安全方面的高手,出于各种目的,都在尝试开发基于VT技术的调试器。

你可能感兴趣的:(软件调试)