только 3 функции экспортируются в dbgeng.dll? - PullRequest
1 голос
/ 13 сентября 2010

Из некоторых книг я знал, что dbgeng.dll - это механизм отладки для отладчика, он экспортирует множество методов для отладки.

Но с учетом зависимости я обнаружил, что только 3 функции (как показано ниже)экспортируются в dbgeng.dll, так как эти отладчики, как windbg.exe / cdb.exe, могут использовать dbgeng.dll

DebugConnect
DebugConnectWide
DebugCreate

Ответы [ 2 ]

3 голосов
/ 13 сентября 2010

Скачайте WinDBG и посмотрите примеры SDK, в частности пример dumpstk, который показывает, как открыть файл аварийного дампа и распечатать стек вызовов.Джерри описал это правильно, вы вызываете 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);
    }
}

-Скотт

1 голос
/ 13 сентября 2010

Я не исследовал этот конкретный интерфейс подробно, но довольно много DLL работают примерно одинаково. Скорее всего DebugCreate возвращает (адрес?) Какой-то объект, который имеет все вызовы для реальной отладки (но вам нужно знать такие вещи, как, какой адрес функции находится по какому смещению и какие параметры загружать, где перед вами может реально его использовать).

Считайте, что это своего рода аналог объекта COM, но только с одним предварительно заданным интерфейсом вместо нескольких с возможностью динамического поиска и использования интерфейсов.

...