Плагин для импорта в отладчик x64dbg отладочной информации из fasm ассемблера (из файла .fas).
Содержание
- Назначение
- Функциональные возможности xFasImport
- Планируемые возможности в будущих версиях
- Альтернативные решения
- Как создать отладочную информацию в fasm
- Особенности отладочного fas-файла
- Локализация
- Исходные коды
- История версий xFasImport
- Загрузка и установка плагина
- Тестовый пример генерации ошибки для вызова отладчика
Назначение
Этот плагин полезен для тех кто пользуется fasm (flat assembler) и отладчиком x64dbg. Fasm умеет создавать файл с отладочными данными (именами меток, функций и т.п.). Но формат отладочных данных у fasm свой собственный (стандартный pdb он создавать не умеет), и для его использования в отладчиках нужные сторонние средства.
Функциональные возможности xFasImport
- Поддержка отладочных данных fasm для исполняемых файлов формата PE/PE+ (win32/win64);
- Автозагрузка .fas-файлов (если у файла время отличается не более 3 секунд и файл не был ранее загружен);
- Поддержка загрузки отладочных данных для DLL (выбор модуля для адресов которого требуется загрузка отладочных данных);
- Загрузка имён меток и функций;
- Загрузка в комментарии строк исходного asm-файла (для более понятного анализа машинного кода сгенерированного макросами, имён локальных переменных в proc-функциях, авторских комментариев);
- Поддержка юникода (национальных букв, отличных от ASCII) в путях к файлам;
- Полная поддержка любых национальных 8-битных кодировок в исходниках (всё корректно конвертируется – исходная кодировка указывается в настройках плагина – и импортируется в x64dbg в виде UTF-8).
Планируемые возможности в будущих версиях
- Поддержка отладочных данных для файлов скомпилированных в формат COFF и затем собранных сторонним линковщиком в исполняемые PE/PE+ (ситуация когда fas-файл сопоставлен с промежуточным COFF-файлом, а не с финальным исполняемым PE-файлом);
- Автозагрузка fas-файлов для DLL, если они есть;
- Автоматическая очистка старого импорта, в случае несовпадения контрольной суммы в базе.
Альтернативные решения
Для отладчика x64dbg давно существует плагин xFasConv – но он загружает только имена функций и глобальных переменных. А имена локальных (стековых) переменных, к которым макросы fasm (в частности конструкции PROC … LOCALS … ENDL … ENDP
) делают обращения через [EBP+n], в отладчик не загружаются и глядя на свой же код в отладчике не понятно что там за MOV EAX,[EBP+4]
например). Есть косвенное решение этой проблемы – загружать локальные имена в виде комментариев к коду, такое решение реализовано в утилите x64dbg_dd.exe, однако неудобство в том что надо заранее её использовать – она создаёт отдельный файл dd32 или dd64 который потом импортируется в базу x64dbg.
Вышеуказанные решения неудобны (медленны), и имеют ряд проблем (некорректная работа с национальными кодировками, проблемы в некоторых случаях загрузки по изменённому базовому адресу, сложности с загрузкой отладочных данных для DLL).
Представленный тут плагин xFasImport для x64dbg – совмещает в себе функционал старых xFasConv и x64dbg_dd.exe, плюс новые возможности – теперь из меню плагина в x64dbg сразу загружаются и глобальные метки и исходный код (что позволяет видеть локальные метки и логику аргументов INVOKE/STDCALL в виде единой строки, а не несколько PUSH).
Как создать отладочную информацию в fasm
Для создания отладочной информации (файла .fas) в fasm:
у fasm.exe используйте ключ -s (например fasm.exe test.asm -s test.fas test.exe
),
у fasmw.exe используйте команду Build symbols (Ctrl+F8) в меню.
fasmg не имеет простого способа, его поддержка не планируется.
Потом созданный .fas-файл можно импортировать в x64dbg через меню Модули:
Особенности отладочного fas-файла
Обращаю внимание что fas-файл не содержит весь исходный код.
В fas-файле содержатся имена меток и ссылки на строки внешних asm-файлов исходника. Имена меток читаются из fas-файла, а строки исходного кода читаются из asm-файлов. Поэтому, для корректной загрузки fas-файла в отладчик – все исходные asm-файлы тоже должны быть доступны и неизменны (если после компиляции программы вы что-то измените в исходниках, а потом загрузите это в отладчик не пересобрав программу – то исходник будет не соответствовать, позиции строк на которые ссылается fas-файл будут ошибочные).
Для некоторых asm-файлов в fas-файле могут быть прописаны ссылки с полными путями, поэтому перемещать их нельзя. fas-файл обычно не пригоден для использования на других компьютерах (вне исходной среды). В плагине реализован инструмент показывающий все ссылки в fas-файле и возраст файлов (если ссылка на файл исходника который моложе чем сам fas-файл – то вероятно что fas-файл более не актуален).
Локализация
Встроенный язык – английский. Но плагин читает настройку Language (из x64dbg) и подгружает соответствующий lng-файл, который должен лежать в папке plugins (рядом с плагином), например: xFasImport_ru.lng, xFasImport_fr.lng, xFasImport_de.lng, xFasImport_it.lng, xFasImport_zh_TW.lng
На данный момент в комплекте есть только xFasImport_ru.lng (русский перевод) и xFasImport_template.lng (английский шаблон для переводов), используя эти файлы в качестве примеров вы можете сделать перевод на любой язык. При желании можете присылать локализованные lng-файлы мне и они будут включены в дистрибутив.
Исходные коды
Исходники плагина xFasImport опубликованы на GitHub.
История версий xFasImport
История развития плагина: | |
v.2.0.0.200 (2024.03.28) | Автозагрузка .fas-файлов (если у файла время отличается не более 3 секунд и файл не был ранее загружен). Доработана логика поиска файла локализации (если в x64dbg выбран язык в варианте ‘xx_XX’, а такого файла локализации нет — то будет попытка найти файл для языка ‘xx’). |
v.1.2.0.190 (2024.03.22) | Экранирование символа ‘{‘ при импорте (иначе он пропадал из комментариев исходника). Исправлена ошибка со ссылкой на сайт в 64-битной версии. |
v.1.1.0.186 (2023.03.17) | Косметическая правка диалогов в WinXP. |
v.1.1.0.185 (2023.03.14) | Мелкие правки, публикация исходных кодов. |
v.1.0.0.180 (2022.08.20) | Первая публичная версия. |
Загрузка и установка плагина
Скачать файлы xFasImport можно тут
Скачать “xFasImport_v20.rar” – 28,92 КБВерсия 2.0.0.200, 2024-03-28
Скачать “xFasImport_v11b.rar” – 26,45 КБВерсия 1.1.0.186, 2023-03-17
Файл xFasImport.dp32 помещается в папку \x64dbg\release\x32\plugins
Файл xFasImport.dp64 помещается в папку \x64dbg\release\x64\plugins
lng-файлы помещаются в эти же папки.
Тестовый пример генерации ошибки для вызова отладчика
Инициирует ошибку разными способами – чтение из нулевого адреса, деление на 0, команда UD2, INT1, INT3, исполнение кода в секции данных. В основном процессе и во внешней DLL.
Исходник (.asm) для сборки exe/dll 32/64 и создания fas-файлов к ним.
Скачать “test_debug_20220820.rar” – 5,05 КБВерсия 1, 2022-08-20