WinDbg——拓展DLL开发入门

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

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

 

实现

 

主要包含两个点:

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

2. 导出函数

 

创建一个简单的DLL工程。

源码如下:

.h

#include <windows.h>

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


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

 

 

 

 

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值