WinDbg——拓展DLL开发入门

WinDbg提供了接口实现第三方开发自定义功能的库。

废话少说,以下是最简单的一个Demo,只包含一个help指令。

 

实现

 

主要包含两个点:

1. 实现DebugExtensionInitialize 函数,这是实现WinDbg拓展DLL必须实现的;WinDbg在载入此DLL会调用。

2. 导出函数

 

创建一个简单的DLL工程。

源码如下:

.h

#include 

#define KDEXT_64BIT    // 定义使用64bit,针对wdbgexts.h头文件
#include 
#include 


HRESULT
CALLBACK
DebugExtensionInitialize(
    OUT PULONG  Version,
    OUT PULONG  Flags
    );


HRESULT
CALLBACK
help(PDEBUG_CLIENT4 pDebugClient, PCSTR args);

 

.cpp

// KrDbgExtend.cpp : Defines the exported functions for the DLL application.
//

#include "KrDbgExtend.h"


WINDBG_EXTENSION_APIS   ExtensionApis;


HRESULT CALLBACK
DebugExtensionInitialize(PULONG Version, PULONG Flags)
{

    IDebugClient *DebugClient;
    PDEBUG_CONTROL DebugControl;
    HRESULT Hr;

    *Version = DEBUG_EXTENSION_VERSION(1, 0);
    *Flags = 0;
    Hr = S_OK;

    if ((Hr = DebugCreate(__uuidof(IDebugClient),
        (void **)&DebugClient)) != S_OK)
    {
        return Hr;
    }

    if ((Hr = DebugClient->QueryInterface(__uuidof(IDebugControl),
        (void **)&DebugControl)) == S_OK)
    {

        //
        // Get the windbg-style extension APIS
        //
        ExtensionApis.nSize = sizeof(ExtensionApis);
        Hr = DebugControl->GetWindbgExtensionApis64(&ExtensionApis);

        DebugControl->Release();

    }
    DebugClient->Release();
    return Hr;
}



HRESULT CALLBACK help(PDEBUG_CLIENT4 pDebugClient, PCSTR args)
{
    UNREFERENCED_PARAMETER(args);

    dprintf("Help for KrDbgExtend.dll\n"
        "  Hey, No help!!!\n"
        );

    return S_OK;
}

dprintf打印是通过ExtensionApis实现的,而这个结构体DLL开发者来初始化,在段代码是在DebugExtensionInitialize进行了初始化。

 

最后还需要导出函数,这里使用.def文件的方式导出:


; KrDbfExtend.def

EXPORTS
	DebugExtensionInitialize
	help

 

 

使用

注意,DLL位数要和WinDbg位数一致,很显然。

 

加载

kd> .load KrDbgExtend.dll

 

使用

kd> !help
Help for KrDbgExtend.dll
  Hey, No help!!!

值得注意的是,如果别的模块也导出了help指令,这是允许的,这就看那个DLL最后导入的。如果想使用指定模块的help指令,可以:

kd> ![module_name].help

 

卸载

kd> !KrDbgExtend.unload
or
kd> .unload KrDbgExtend

 

 

 

 

你可能感兴趣的:(Windows,WinDbg)