无法让windbg识别我的扩展名

时间:2012-01-22 12:03:16

标签: c++ dbgeng

不幸的是,由于某些原因我无法理解,我无法让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”。我一直试图弄清楚这几个小时。非常感谢您提供的任何帮助。非常感谢。

1 个答案:

答案 0 :(得分:1)

您可能正在使用stdcall调用约定,即使使用extern“C”也会导致名称错误。如果您使用的是cdecl,则情况并非如此。如果您遵循编写WinDBG扩展的标准方法,则可能需要stdcall,因此解决名称修改的最佳方法是使用.def文件,这将允许您完全按照所需的方式调用导出。 / p>

请参阅上一个问题,了解微妙之处:

__cdecl or __stdcall on Windows?