不幸的是,由于某些原因我无法理解,我无法让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中,然后查看导出,然后是:“help”。我一直试图弄清楚这几个小时。非常感谢您提供的任何帮助。非常感谢。
答案 0 :(得分:1)
您可能正在使用stdcall调用约定,即使使用extern“C”也会导致名称错误。如果您使用的是cdecl,则情况并非如此。如果您遵循编写WinDBG扩展的标准方法,则可能需要stdcall,因此解决名称修改的最佳方法是使用.def文件,这将允许您完全按照所需的方式调用导出。 / p>
请参阅上一个问题,了解微妙之处: