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

可能性としては、extern "C" でも名前マングリングを引き起こす stdcall 呼び出し規則を使用している可能性があります。cdecl を使用している場合、これは当てはまりません。WinDBG 拡張機能を記述する標準的な方法に従っている場合は stdcall が必要になる可能性があるため、名前マングリングを回避する最善の方法は、.def ファイルを使用することです。これにより、必要なとおりにエクスポートを呼び出すことができます。

微妙な点の概要については、この前の質問を参照してください。

Windows で __cdecl または __stdcall?

于 2012-01-22T14:24:29.153 に答える