z80: Инструменты статического и динамического анализа кода.


Отчасти развивая вопрос поднятый в этой публикации, хочу спросить у вас: «какие есть 'умные' интерактивные инструменты динамического и статического анализа кода для z80 (кроме дорогущего IDA Starter/Pro)»?

И что эти «умники» умеют?

  1. какие (и где) есть инструменты динамического анализа кода?
    к примеру, для того, чтобы получить маркировку участка исходного кода как «исполняемого», достаточно запустить программу под эмулятором, некоторое время погонять её с включенным логированием состояния регистра PC (указатель адреса исполняемой команды) — как результат получим массив адресов, по которым реально расположен исполняемый код.

    Аналогично можно проанализировать и запись/чтение из адресов памяти:
    • если из ячейки памяти данные только считывались — перед нами константа,
    • если только записывались, а потом исполнялись — перед нами кусок самомодифицирующегося кода,
    • если записывались/считывались — перед нами переменная (разрядность переменной определяется по команде считывания, возможный вид участка памяти — по способу адресации (если через индексные регистры — то, возможно перед нами массив глобальных переменных),
    • перемещался ли блок памяти и откуда/куда (в каком количестве).
    • логирование исполнений команд перехода (сбор для каждого исполняемого адреса с какого адреса перешли по данному адресу (если предыдущей командой была команда условного/безусловного перехода).
  2. какие (и где) есть инструменты статического анализа кода?
    к примеру, указываем стартовый адрес блока (org #0100) — и пробегаем код (без исполнения) с анализом ветвлений: строим граф переходов, в котором каждая из команд условного перехода — вершина, параллельно помечая пройденные адреса команд как исполняемый код. Если какие-то исполняемые участки были пропущены динамическим анализом в п. 2), то тут мы получим информацию о дополнительных редкоисполняемых участках программы.

    Правда при подобном анализе есть несколько (разрешимых) проблем:
    анализ переходов по jp (hl), jp (sp) = ret. В случае с ret — нужен контроль за состоянием стека.
  3. Ну и инструмент для разбора всей этой статистики =)

И где и как это реализовано? Где и как это можно реализовать? =)

N.B.: То есть сценарий использования может быть такоей: наткнулись в дизассемблированном листинге на jp (hl) какому-либо адресу: посмотрели в статистике, собранной динамическим анализом, по каким адресам из этой инструкции осуществлялись переходы, и жить стало проще.

11 комментариев

avatar
Есть интересный ресурс www2.onlinedisassembler.com/odaweb/
К сожалению, сыроватый. Сколько ни пытался задизасмить кое-какие бинари, уходил в бесконечный апдейт.
А идея да, хорошая.
avatar
Выглядит интересно, спасибо.

А ты в исходниках современных эмулей спектрума не ориентируешься? По ощущениям, куда и как проще такой сбор статистики добавить?
avatar
Имхо, в тот, который актуален и поддерживается (крайне желательно чтоб непосредственно автором).
А вообще, все зависит от задачи. Создать AY файл по результатам исполнеия 48к снапшота и построить карту исполнения кода в расширенной памяти для нетиповой конфигурации- это две разные вещи.
avatar
Screw^ohg (с питера который) делал версию анрыла под себя именно для сбора статистики года 3 назад еще, попробую с ним связаться.
avatar
Ого! Красота! Tnx!
avatar
ну чо каг? =)
avatar
ну чо каг? 2=)
avatar
Лучше IDA ничего не придумано. Однако, есть еще более интересная мысль, высказанная esl (и он ее даже вроде реализовал в виде скрипта к IDA). Суть в том, что скажем дизассемблируем игру — берем rzx с прохождением, где собственно и записано, как в игре что ходит и куда. Таким образом, получаем 99% участков, где исполняется код. Ну и в общем-то это всё. Основа есть, остается вкурить в процедуры и всё. Такой вот анализ.
  • ShM
  • +5
avatar
IDA, по очевидным причинам (высокая цена, закрытость) не может рассматриваться как общедоступный инструмент, хоть он и, де-факто, самый крутой в нише.

Какие-то альтернативы достойные рассмотрения можешь посоветовать? =)
avatar
Не могу, альтернативы нет. Напиши Ильфаку, может у него будет хорошее настроение и он скомпилит бесплатную версию для Z80? :)
avatar
насчет ИДЫ — есть удобный инструмент версии 6.6 в котором ручки+голова сделают удобный читаемый исходник. Максимум, что мне не понравилось — это отсутствие скриптинга и невнятная литература по сабжу.

а вообще есть 4.5 фриварная, хотя я не юзал такое.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.