Не могу заставить WindBG распознать мое расширение
К сожалению, по какой-то причине я не могу понять, я не мог заставить себя узнать мое расширение.
#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 ответ
Скорее всего, вы используете соглашение о вызовах stdcall, которое приводит к искажению имени даже с помощью extern "C". Если бы вы использовали cdecl, это было бы не так. Возможно, вам потребуется stdcall, если вы следуете стандартному методу написания расширения WinDBG, поэтому лучший способ обойти искажение имени - это использовать файл.def, который позволит вам вызывать экспорт именно так, как вы хотите.
Смотрите этот предыдущий вопрос для хорошего изложения по тонкостям: