我有一个旧的 Visual Studio EEAddin 样式的调试器扩展,旨在获取在运行时已映射到整数的字符串并反转映射,以便在监视窗口中显示原始字符串值。
例如,映射到整数的字符串的显示0x39ad1dc4
是0x39ad1dc4 (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 确定十六进制显示复选框的状态?如有必要,我可以在新的扩展平台中重新编写查看器,只要该平台允许我为本地代码编写扩展。