Как стать автором
Обновить

Симулятор-Отладчик x86-кода

Уровень сложности Сложный
Время на прочтение 2 мин
Количество просмотров 2.6K
Кейс

Разрабатывая код для очень узких мест, привычного стандартного набора средств и отладчиков зачастую не хватает, когда нам требуется отладить фрагмент алгоритма именно в конкретном случае, в конкретном состоянии окружения и массивов данных.

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

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

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

На старте разработки подобного инструмента за образец был взят данный сервис не в буквальном смысле, а как направление функциональности GUI, так как эмуляция в нём точная, но не полная и с симуляцией виртуального окружения с демонстрацией.

Вниманию аудитории разработчиков здесь представляется именно прототип концепции отладчика с навигацией как по отдельным инструкциям, так и по моментам времени, закреплённых за отдельными итерациями.

Набор поддерживаемых инструкций пока мал и ограничен лишь теми, что требовались
для отладки конкретных участков кода. В симуляторе имеется простое окружение на
основе Canvas‑графики, а зажимая клавиши HOME и END можно проматывать итерации.

Запустить симулятор отладки можно по ссылке.
Исходный текст пока размещён только в gist-репозитории.

Имеется возможность подгрузки собственных стилей (вырви глаз пример) и листингов.
В меню двойным кликом по стилю можно его открыть в поле редактирования и изменять в режиме реального времени.

P. S.: Всё это безобразие разрабатывалось для собственных нужд и не было написано с чистого листа, а лишь переработка эмулятора моего соседнего проекта, что можно заметить по исходному коду, где много лишнего.

Если кому‑нибудь окажется полезным, буду рад выслушать предложения по развитию движка.

Теги:
Хабы:
Всего голосов 24: ↑23 и ↓1 +22
Комментарии 19
Комментарии Комментарии 19

Публикации

Истории