从一些书中,我知道dbgeng.dll是调试器的调试引擎,它会导出许多调试方法。
但是依赖于依赖,我发现在dbgeng.dll中只导出了3个函数(如下所示),那么像windbg.exe / cdb.exe这样的调试器如何使用dbgeng.dll
DebugConnect
DebugConnectWide
DebugCreate
答案 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对象的类比,但只有一个预定义的接口,而不是几个能够动态查找和使用接口的接口。