2

我有一个旧的 Visual Studio EEAddin 样式的调试器扩展,旨在获取在运行时已映射到整数的字符串并反转映射,以便在监视窗口中显示原始字符串值。

例如,映射到整数的字符串的显示0x39ad1dc40x39ad1dc4 (Hello, world!).

当我格式化结果的整数部分时,我想尊重调试器的“十六进制显示”标志的设置,但我不确定如何(甚至是否)可以从我的回调中访问该设置。

作为参考,我正在使用的 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 确定十六进制显示复选框的状态?如有必要,我可以在新的扩展平台中重新编写查看器,只要该平台允许我为本地代码编写扩展。

4

0 回答 0