в dbgeng.dll экспортируются только 3 функции?

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

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

DebugConnect
DebugConnectWide
DebugCreate

person adshuangjoh    schedule 13.09.2010    source источник


Ответы (2)


Загрузите 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);
    }
}

-Скотт

person snoone    schedule 13.09.2010
comment
Спасибо, возьму на вооружение эти образцы. Спасибо за информацию. - person adshuangjoh; 14.09.2010

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

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

person Jerry Coffin    schedule 13.09.2010