dbgeng.dll中只导出3个函数?

时间:2010-09-13 16:57:00

标签: debugging windbg

从一些书中,我知道dbgeng.dll是调试器的调试引擎,它会导出许多调试方法。

但是依赖于依赖,我发现在dbgeng.dll中只导出了3个函数(如下所示),那么像windbg.exe / cdb.exe这样的调试器如何使用dbgeng.dll

DebugConnect
DebugConnectWide
DebugCreate

2 个答案:

答案 0 :(得分:3)

下载WinDBG并查看SDK示例,特别是dumpstk示例,其中显示了如何打开故障转储文件并打印调用堆栈。 Jerry正确地描述了它,你调用DebugCreate来创建一个IDebugClient的实例,然后你可以创建其他类的实例来进行调试相关的活动。

来自样本:

void
CreateInterfaces(void)
{
    HRESULT Status;

    // Start things off by getting an initial interface from
    // the engine.  This can be any engine interface but is
    // generally IDebugClient as the client interface is
    // where sessions are started.
    if ((Status = DebugCreate(__uuidof(IDebugClient),
                              (void**)&g_Client)) != S_OK)
    {
        Exit(1, "DebugCreate failed, 0x%X\n", Status);
    }

    // Query for some other interfaces that we'll need.
    if ((Status = g_Client->QueryInterface(__uuidof(IDebugControl),
                                           (void**)&g_Control)) != S_OK ||
        (Status = g_Client->QueryInterface(__uuidof(IDebugSymbols),
                                           (void**)&g_Symbols)) != S_OK)
    {
        Exit(1, "QueryInterface failed, 0x%X\n", Status);
    }
}

-Scott

答案 1 :(得分:1)

我没有详细研究过这个特定的接口,但是很多DLL的工作方式大致相似。最有可能DebugCreate返回(地址?)某种对象,它具有进行实际调试的所有调用(但是你需要知道哪些函数的地址在什么偏移处,以及要加载哪些参数在你真正使用之前)。

将其视为COM对象的类比,但只有一个预定义的接口,而不是几个能够动态查找和使用接口的接口。