gpt4 book ai didi

c++ - DbgHelp - 获取完整的符号签名(函数名+参数类型)

转载 作者:搜寻专家 更新时间:2023-10-31 02:20:46 27 4
gpt4 key购买 nike

我正在使用 SymEnumSymbols获取给定掩码的所有匹配符号,并使用 CALLBACK 函数将它们推送到 vector 中。问题是,符号名称(在 PSYMBOL_INFO 结构中)只是函数的名称,而不是整个签名。例如,我有这个函数:

TestMe!GetImageProcAddress (struct HINSTANCE__ *hi, int num)

当我调用 SymEnumSymbols使用掩码 "TestMe!GetImageProcAddress",并打印匹配符号的名称,我得到:

printf("%s\n", pSymInfo->Name); // Prints: GetImageProcAddress

但我希望它打印其中一个:

TestMe!GetImageProcAddress (struct HINSTANCE__ *, int)
GetImageProcAddress (struct HINSTANCE__ *, int)

所以我的问题 - 有没有办法获得完整的符号签名(函数名称 + 参数类型)?我能够使用 SymSetContext 遍历参数, 然后 SymEnumSymbols并使用标志 SYMFLAG_PARAMETER 进行过滤 - 但我不知道如何获取参数的类型..

谢谢!

最佳答案

经过长时间的搜索 - 我找到了解决方案。获取函数的索引后,您需要通过使用 SymSetContext 将上下文设置为特定函数地址来枚举它的参数。 , 然后调用 SymEnumSymbols (并将其设置为使用上下文):

SymEnumSymbols(GetCurrentProcess(), 0, NULL, ...)

然后,通过使用标志 SYMFLAG_PARAMETER,您可以仅选择函数参数。现在,使用参数 TypeIndex,您可以通过调用(多次)SymGetTypeInfo 来搜索参数类型.不简单,还有很多base case……

一个非常好的解释可以在这里找到: HOW TO USE DBGHELP TO ACCESS TYPE INFORMATION

可以在这里找到一个例子: TYPEINFODUMP

祝你好运!

关于c++ - DbgHelp - 获取完整的符号签名(函数名+参数类型),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32251638/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com