IDA интерфейс не поддерживается

Метки:  , , , , ,

При использовании интерактивного дизассемблера IDA (6.х+ версий) на некоторых системах наблюдается интересная проблема: при типовой загрузке произвольного файла, для которого имеется отладочная информация, программа сперва выдает запрос на подгрузку файла символов (.pdb-файл) с сервера Microsoft или локального хранилища символов:

IDA symbol load

а затем, уже непосредственно при попытке загрузки файла символов с сервера символов Microsoft, может выскочить такая вот ошибка:

IDA no interface supported

<имя_модуля>: failed to load pdb info. интерфейс не поддерживается.
Теперь, если обратить внимание на фрейм в нижней части интерфейсного окна IDA (output window), то можно увидеть дополнительные детали инцидента:

Тем не менее немногие догадываются туда заглянуть. Внимательные пользователи будут вознаграждены экономией некоторого количества времени. Если вы обратите внимание на подсвеченные строки, то увидите там как само сообщение об ошибке:

,так и рекомендацию по устранению:

Полезно быть внимательным, не находите? Но и невнимательным быть то же неплохо, поскольку невнимательные тратят то же драгоценное время на поиск, что ведет к открытию для себя незнакомых ранее системных механизмов, существенно расширяя кругозор.

Теория

Перво-наперво нам следует понять, что дизассемблеры/отладчики должны иметь возможность загружать и использовать символьную информацию из PDB-файлов в случае, если для загружаемого в данный момент для дизассемблирования модуля имеется прилинкованная отладочная информация. Причина проста - отладочная информация (часто называемая символами), используется этим инструментами для расширенного (более подробного) комментирования, а соответственно и улучшения качества листинга исходного кода. Логично предположить, что для обеспечения загрузки отладочной информации, должен присутствовать некий внутренний или внешний системный механизм? В строке, содержащей рекомендации по устранению ошибки (окно журналирования), фигурирует некий новый для нас термин под названием MS DIA SDK.

DIA (Debug Interface Access, Доступ к интерфейсу отладки) - созданный компанией Microsoft программный интерфейс (API) доступа к интерфейсу отладки, предоставляющий возможность скачивать и извлекать необходимую отладочную информацию из символьных файлов.

IDA производит загрузку PDB-файлов используя следующие методы:

  • DbgHelp (ранее ImageHlp) -- старый метод. Библиотека dbghelp.dll, содержащая набор функций поддержки отладки, которые позволяют работать с исполняемыми образами в формате PE (portable executable);
  • DIA API -- новый метод. Библиотеки msdia90.dll, msdia100.dll, обеспечивающие интерфейс (API) доступа к интерфейсу отладки;

Если IDA не находит DIA-библиотек, IDA вынуждена использовать "старый" метод, и что-то у неё с ним явно не клеится. Так как же мы будем устранять ошибку IDA интерфейс не поддерживается?

Решение №1

Судя по подсказке в окне логгирования, нам требуется скачать и установить распространяемый пакет под названием Microsoft Visual C++ 2008 Redistributable Package (x86). Для этого переходим по ссылке Microsoft Visual C++ 2008 Redistributable Package (x86), выбираем требуемый язык пакета и скачиваем. После установки распространяемого пакета, мы можем убедиться в присутствии в нашей системе необходимых библиотек интерфейса DIA. Для этого проверяем директорию C:\Program Files\Common Files\microsoft shared\VC:

При наличии в системе указанных библиотек, IDA получает возможность загружать отладочную информацию посредством DIA-библиотек в противоположность использования метода dbghelp.dll. После установки библиотек фрагмент лог-файла процесса загрузки символов выглядит следующим образом:

Решение №2

В корневой инсталляционной директории пакета IDA C:\Program Files\IDA X.X располагаются все необходимые файлы: dbghelp.dll, symsrv.dll. Я так понимаю, именно они должны, по сути, обеспечивать коммуникацию с сервером символов Microsoft. Что же с ними не так?

Возможно, версии этих файлов уже сильно устарели, и можно попробовать следующее решение:

  1. Скачать и установить Пакет SDK;
  2. Переписать файлы dbghelp.dll и symsrv.dll из директории пакета SDK (C:\Program Files\Windows Kits\XX\Debuggers\x86) в корневую директорию IDA (C:\Program Files\IDA X.X);

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *