Windbg指令体系

Windbg,作为Windows御用的调试工具,功能异常强大,其指令亦是相当繁杂。我是从01年开始使用,至今为止所掌握的指令还是最常用的一些,如果做点稍复杂的工作,必须求助于Windbg帮助手册,查手册寻找指令或确认指令语法格式已是经常之事。

倒是被Windbg所替代的一代神器Softice,以其界面和指令的简洁、易用,曾给几代程序人留下深刻印象。我大约是从96年开始使用Softice,至01年完全转移到Windbg上来,但很多Softice的指令还是犹如历历在目,看来“先入者为王”对习惯的养成来说同样是条不二准则。

言归正传,Windbg的指令分为三种:

  • 1)Debugger commands,或 regular commands

    如 u: 反汇编指令;db: 以16进制及字节方式打印数据;t: 单步执行 …

    regular commands 一般是面向于被调试程序或目标系统的,即可以显示被调试程序相关的信息或控制目标程序的的执行等。

  • 2)Meta commands

    如 .reload: 加载符号表;.cls: 清除command窗口所显示的信息;.thread: 挂接并显示指定线线程的上下文(context) …

    meta commands 一般指控制windbg本身的一些指令,所有指令以”.”为开始,如符号表管理相关的指令。

    其实有一些指令功能上与regular command相混淆,如:

    .restart: 重启被调试机器或程序,呵呵,没有比这个对被调试对象更大的控制操作了;
    .writemem: 将指定内存区域写入文件;
    ……

    此外,还有些莫名的指令也归入这一类,如.dbgdbg指令,它会启动调试器来调试当前的调试器,够绕吧!

  • 3)Debugger extension commands

    如 !process:显示当前进程信息;!analyze: 著名的BSOD分析命令…

    这类指令属于windbg的扩展指令,所有指令均以”!”为前缀,指令的实现不在debugger程序体中,而是相关的DLL文件。windbg的扩展组件,有标准的格式,开发者可以根据需要为协助自己程序的调试定制自己的扩展组件。windbg程序包已为不同的应用环境提供了不同的扩展组件:如应用程,内核层,NDIS驱动,GDI图形类驱动……

除了Windbg的帮助手册之外,还有几本书对Windbg的使用很有帮助:

1, Dmitry Vostokov, Memory Dump Analysis Anthology, Volume 1 & 2
    结合实例介绍Windbg的使用技巧,共两本
2, Mario Hewardt & Daniel Pravat, Advanced Windows Debugging
    此书有中译本。主要还是面向Windows内核调试的。
3, 熊力,Windows用户态程序高效排错
    主要面向于用户态及.NET程序的调试。