EreTIk's Box » Утилиты » DSymLoad: Загрузка отладочных символов в HIEW

Download DSymLoad

Когда необходимо быстро что-то посмотреть или исправить в PE-файле очень удобно использовать замечательный инструмент HIEW. Но у него нет штатной возможности загрузки отладочной информации. А это просто необходимо, когда, например, нужно "подсмотреть", что же творится внутри MS’овского драйвера. На официальном сайте есть расширение NamesPeMap, но оно использует MAP-файл, которым обычно публично никто не делится.


Немного поискав на просторах интернета, нашел довольно забавное решение, использующее модуль Python’а и IDA в качестве источника символов: PyHiew: Transferring names between IDA Pro and Hiew. Имена передаются из IDA в HIEW по средствам локальной связки клиент-сервера, которая реализована на Python’овских скриптах. Автор точно знает толк в извращенных формах программирования :)


В связи с таким положением вещей была написана утилита DSymLoad для загрузки отладочных символов в HIEW. На самом деле DSymLoad включает в себя два исполняемых модуля: утилиту командной строки NameTGen.exe и внешний модуль для HIEW - DSymLoad.HEM (с файлом настроек DSymLoad.ini).


NameTGen.exe


NameTGen.exe является консольной утилитой командной строки, которая в стандартный вывод пишет загруженные отладочные символы в формате namet-файла. Формат запуска:


NameTGen.exe <TARGET_FILE_NAME> [OPTIONS]

TARGET_FILE_NAME это обязательный параметр командной строки, в котором передается имя целевого исполняемого файла.


OPTIONS - набор необязательных опций. Опции могут быть:

  • -c: все подстроки C++ символов, содержащих "::" будут преобразованы в "__"
  • -u : по умолчанию, все символы представлены в undecorated - формате (как перевести на русский не знаю). Эта опция отменяет это преобразование. Это удобно для случаев, когда нужно читать параметров по имени символа.
  • -n: обработка коллизий имен символов. Если при обработке встретится символ, имя которого уже было обработано, то к имени будет добавлен суффикс в виде шестнадцатеричного числа (адреса)
  • -s STR: путь до символов. Путь может быть разделен точкой с запятой(;). Если параметр не задан, то библиотека отладчика будет искать символы в текущей директории или в значениях переменных окружения _NT_SYMBOL_PATH и _NT_ALTERNATE_SYMBOL_PATH
  • -l STR: путь к динамическим библиотекам dbghelp.dll and symsrv.dll. Обычно это путь к установленному отладчику WinDbg
  • -i STR: загрузка всех опций из файла DSymLoad.ini (STR-путь к файлу DSymLoad.ini)

Для себя я создал команду для FAR’а (<F2> -> <Ins>) которая формирует namet-файл:


@NameTGen.exe !.! -n -l "C:\Program Files\Debugging Tools for Windows (x86)" > !.namet

В этой строке использованы метасимволы !.! - полное имя файла с расширением и !.namet полное имя файла с расширением namet. После обработки исходного файла такой командой, можно импортировать получившийся namet-файл в HIEW, как список имен локальных смещений(<F12>(Names) -> <F12>(Import))


DSymLoad.HEM


Что бы загружать символы "не отходя от HIEW" был написан внешний модуль DSymLoad.HEM. Это загружаемая в HIEW библиотека, которая использует отладочную информацию, перечисляет символы и формирует локальные символы для текущего файла. Фактически, я просто вынес движок перечисления символов в отдельную статическую библиотеку и собрал DLL. Параметры библиотеки почти полностью совпадают с NameTGen.exe. За исключением параметра перезаписи существующих имен ("Overrride name if exist"). Этот параметр позволяет не перезатирать уже введенные другими способами имена локальных смещений.


Для хранения настроек используется обычный INI-файл (DSymLoad.ini). Этот файл должен располагаться в той же директории, что и исполняемый образ DSymLoad.HEM.

Важный момент: все настройки, измененные в главном диалоговом окне, не сохраняются в файл, пока не будет нажата клавиша <F8>.


Скачать утилиту DSymLoad




Change log:


0.1.0.1:

Добавлена детализация загрузки отладочных символов

NameTGen.exe поддерживает ключ -i

В архив добавлены необходимые библиотеки отладки

0.1.0.0

Первая публичная работоспособная версия



ΞρεΤΙκ