可以'Don’我没让windberg认出我的分机

Can't get windbg to recognise my extension

本文关键字:windberg 我的 Don 可以      更新时间:2023-10-16

不幸的是,由于某种原因,我无法理解,我无法让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"。我已经想了好几个小时了。如能提供任何帮助,我们将不胜感激。非常感谢。

很可能您使用的是stdcall调用约定,即使使用extern"C"也会导致名称篡改。如果你使用cdecl,情况就不会是这样了。如果您遵循编写WinDBG扩展名的标准方法,则可能需要stdcall,因此解决名称篡改问题的最佳方法是使用.def文件,该文件将允许您根据需要调用导出。

请参阅上一个问题,以获得关于微妙之处的良好概述:

__Windows上的cdecl或__stdcall?