Не могу заставить WindBG распознать мое расширение - PullRequest
0 голосов
/ 22 января 2012

К сожалению, по какой-то причине я не могу понять, я не смог заставить себя распознать мое расширение.

#ifndef EXPT_API
#define EXPT_API __declspec(dllexport)
#endif

extern "C" EXPT_API HRESULT CALLBACK help(PDEBUG_CLIENT Client, PCSTR args)
{
    IDebugControl* Control;
    IDebugSymbols* Symbols;

    DebugCreate(__uuidof(IDebugClient),(void **)&Client);
    Client->QueryInterface(__uuidof(IDebugControl), (void **)&Control);
    Client->QueryInterface(__uuidof(IDebugSymbols), (void **)&Symbols);

    // TODO: Extension code goes here:

    Control->Output(DEBUG_OUTPUT_NORMAL, "A sample help message.");

    return S_OK;
}

Все это прекрасно компилируется, однако всякий раз, когда я пытаюсь загрузить расширение из windbg, я получаю следующее:

!Extension.help
No export help found

Я загружаю .dll в IDA Pro Free,и посмотрите на экспорт, и вот оно: «помощь».Я пытался понять это часами.Буду очень признателен за любую помощь, которую вы можете предложить.Большое спасибо.

1 Ответ

1 голос
/ 22 января 2012

Скорее всего, вы используете соглашение о вызовах stdcall, которое приводит к искажению имени даже с внешним "C". Если бы вы использовали cdecl, это было бы не так. Возможно, вам потребуется stdcall, если вы следуете стандартному методу написания расширения WinDBG, поэтому лучший способ обойти искажение имени - это использовать файл .def, который позволит вам вызывать экспорт именно так, как вы хотите.

См. Этот предыдущий вопрос для хорошего изложения по тонкостям:

__cdecl или __stdcall в Windows?

...