0

不幸的是,由于某种我无法理解的原因,我无法让 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 中,然后查看导出,它是:“帮助”。几个小时以来,我一直试图弄清楚这一点。您能提供的任何帮助将不胜感激。非常感谢。

4

1 回答 1

1

您可能正在使用 stdcall 调用约定,即使使用 extern "C" 也会导致名称混乱。如果您使用的是 cdecl,则情况并非如此。如果您遵循编写 WinDBG 扩展的标准方法,则可能需要 stdcall,因此解决名称修改的最佳方法是使用 .def 文件,该文件允许您准确调用导出的内容。

有关细微之处的详细介绍,请参阅上一个问题:

__cdecl 或 __stdcall 在 Windows 上?

于 2012-01-22T14:24:29.153 回答