DbgHelp — получить полную символьную подпись (имя функции + типы параметров)

я использую SymEnumSymbols чтобы получить все совпадающие символы для заданной маски и вставить их в вектор с помощью функции CALLBACK. Проблема в том, что имя символа (который находится внутри 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 — но я не знаю, как получить типы параметров ..

Спасибо!

1

Решение

После долгих поисков — я нашел решение.
После получения индекса функции вам нужно перечислить ее параметры, установив контекст для конкретного адреса функции, используя SymSetContext, потом звоню SymEnumSymbols (и установите его для использования контекста):

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

Затем с помощью флага SYMFLAG_PARAMETER Вы можете выбрать только параметры функции. Теперь, используя параметр TypeIndexВы можете искать тип параметра, вызывая (много раз) SymGetTypeInfo. Это не просто, и есть много базовых случаев …

Действительно хорошее объяснение можно найти здесь:
Как использовать DBGHELP для доступа к информации о типе

И пример можно найти здесь:
TYPEINFODUMP

Удачи!

1

Другие решения


По вопросам рекламы [email protected]