2

実行時に整数にマップされた文字列を取得し、元の文字列値をウォッチ ウィンドウに表示するためにマッピングを逆にするように設計された古い Visual Studio EEAddin スタイルのデバッガー拡張機能があります。

たとえば、整数にマッピングされた文字列の表示0x39ad1dc4は です0x39ad1dc4 (Hello, world!)

結果の整数部分をフォーマットするときに、デバッガーの「16 進数表示」フラグの設定を尊重したいのですが、コールバックからその設定にアクセスする方法 (またはアクセスするかどうか) がわかりません。

参考までに、私が使用している EEAddin の「カスタム ビューアー」コールバックは次のとおりです。

typedef HRESULT (WINAPI * CUSTOMVIEWER)(DWORD address, DEBUGHELPER * helper, int base, BOOL useUnicodeStrings, char * result, size_t max, DWORD reserved);

baseこのパラメーターは必要な情報を提供してくれると思うかもしれませんが、私のテストで10は、デバッガーの hex-display オプションの状態に関係なく、常に でした。

DEBUGHELPER次のような API にアクセスできます。

typedef struct tagDEBUGHELPER {
    DWORD dwVersion;

    HRESULT (WINAPI * ReadDebuggeeMemory)(struct tagDEBUGHELPER * self, DWORD address, DWORD bytesToRead, VOID * destination, DWORD * bytesActuallyRead );

    // The API calls below are only supported when dwVersion is >= 0x20000.
    DWORDLONG (WINAPI * GetRealAddress)(struct tagDEBUGHELPER * self);
    HRESULT (WINAPI * ReadDebuggeeMemoryEx)(struct tagDEBUGHELPER * self, DWORDLONG address, DWORD bytesToRead, VOID * destination, DWORD * bytesActuallyRead);

    int (WINAPI * GetProcessorType)(struct tagDEBUGHELPER * self);
} DEBUGHELPER;

インターネット上に散在するサンプル コードに基づいて、この API を手動で定義する必要がありました。それと関連する可能性のある API のドキュメントを入手するのはかなり困難です。上記の構造とコールバック タイプは、私が認識している API の唯一の部分です。

これ、または関連する API を使用して、16 進数表示のチェックボックスの状態を判断する方法はありますか? そのプラットフォームでネイティブ コードの拡張機能を作成できる限り、必要に応じて新しい拡張プラットフォームでビューアーを書き直すことができます。

4

0 に答える 0