DbgHelp - 获取完整的符号签名(函数名+参数类型)
DbgHelp - Get full symbol signature (function name + parameters types)
我正在使用 SymEnumSymbols
获取给定掩码的所有匹配符号,并使用 CALLBACK 函数将它们推送到向量中。问题是,符号名称(在 PSYMBOL_INFO
结构中)只是函数的名称,而不是整个签名。例如,我有这个函数:
TestMe!GetImageProcAddress (struct HINSTANCE__ *hi, int num)
当我使用掩码 "TestMe!GetImageProcAddress"
调用 SymEnumSymbols
并打印匹配符号的名称时,我得到:
printf("%s\n", pSymInfo->Name); // Prints: GetImageProcAddress
但我希望它打印其中之一:
TestMe!GetImageProcAddress (struct HINSTANCE__ *, int)
GetImageProcAddress (struct HINSTANCE__ *, int)
所以我的问题 - 有什么方法可以获得完整的符号签名(函数名称 + 参数类型)?我能够使用 SymSetContext
遍历参数,然后使用 SymEnumSymbols
并使用标志 SYMFLAG_PARAMETER
进行过滤 - 但我不知道如何获取参数的类型..
谢谢!
经过长时间的搜索 - 我找到了解决方案。
获取函数的索引后,您需要通过使用 SymSetContext
, then calling SymEnumSymbols
将上下文设置为特定函数地址来枚举它的参数(并将其设置为使用上下文):
SymEnumSymbols(GetCurrentProcess(), 0, NULL, ...)
然后,通过使用标志 SYMFLAG_PARAMETER
,您可以 select 只有函数参数。现在,使用参数 TypeIndex
,您可以通过调用(多次)SymGetTypeInfo
来搜索参数类型。不简单,还有很多base case...
可以在这里找到一个非常好的解释:
HOW TO USE DBGHELP TO ACCESS TYPE INFORMATION
可以在此处找到示例:
TYPEINFODUMP
祝你好运!
我正在使用 SymEnumSymbols
获取给定掩码的所有匹配符号,并使用 CALLBACK 函数将它们推送到向量中。问题是,符号名称(在 PSYMBOL_INFO
结构中)只是函数的名称,而不是整个签名。例如,我有这个函数:
TestMe!GetImageProcAddress (struct HINSTANCE__ *hi, int num)
当我使用掩码 "TestMe!GetImageProcAddress"
调用 SymEnumSymbols
并打印匹配符号的名称时,我得到:
printf("%s\n", pSymInfo->Name); // Prints: GetImageProcAddress
但我希望它打印其中之一:
TestMe!GetImageProcAddress (struct HINSTANCE__ *, int)
GetImageProcAddress (struct HINSTANCE__ *, int)
所以我的问题 - 有什么方法可以获得完整的符号签名(函数名称 + 参数类型)?我能够使用 SymSetContext
遍历参数,然后使用 SymEnumSymbols
并使用标志 SYMFLAG_PARAMETER
进行过滤 - 但我不知道如何获取参数的类型..
谢谢!
经过长时间的搜索 - 我找到了解决方案。
获取函数的索引后,您需要通过使用 SymSetContext
, then calling SymEnumSymbols
将上下文设置为特定函数地址来枚举它的参数(并将其设置为使用上下文):
SymEnumSymbols(GetCurrentProcess(), 0, NULL, ...)
然后,通过使用标志 SYMFLAG_PARAMETER
,您可以 select 只有函数参数。现在,使用参数 TypeIndex
,您可以通过调用(多次)SymGetTypeInfo
来搜索参数类型。不简单,还有很多base case...
可以在这里找到一个非常好的解释: HOW TO USE DBGHELP TO ACCESS TYPE INFORMATION
可以在此处找到示例: TYPEINFODUMP
祝你好运!