И в чём сложность пройти все ветки кода, когда как раз всё равно придётся "проходить весь код"?
У тебя есть опыт реверса? Как ты автоматически найдёш конец таблицы прыжком switch или вычислиш адрес прыжка, который записываетса в регистр? Или может проходил игру так, штобы эмулятр полностью разметил весь ром (где код, а где данные)? Это же надо применить всё, потыкать в каждый тайник, использовать все приёмы и т.д. И всё равно останетса код, который не доступен - што-то вырезанное, отладочное, всякий мусор...
Если бы можно было пройти код автоматически полностью, то не было бы проблемы в хаках сдвигать код.
Я делаю свой рекомпилятр игр Сеги, и человеку придётса делать в игре всё, штобы покрыть все пути. Програма будет подсказывать типа "холодно-горячо", насколько близок чел к новой ветке кода.
Я бы понял, если бы эти новые рекомпилятры были эмулятрами, которые слиты с игрой, и по мере прохождения код игры заменялся бы на код железа, на котором они запущены. Тогда при первом прохождении много чево тормозило бы, но зато потом уже летало бы.
И всё равно в С++ коде имена магическим образом не появились бы, это смогла бы нейросеть, видя картинку игры.
У меня имена даёт человек.
но вряд ли, кто такое юзал в мегадрайве
И такое есть, хоть и редко. Мефисто и worm с таким сталкивались:
Sonic the Hedgehog (1, 2, 3 & Knuckles):
Некоторые элементы движка переписывают инструкции отрисовки в RAM «на лету» для ускорения работы, что формально является модификацией кода перед исполнением.
Fantastic Dizzy:
Использовала сложные системы сжатия данных, где распаковщик мог модифицировать собственные инструкции для анализа сжатых спрайтов.
Игры с использованием нестандартных декомпрессоров (MEGAPACK):
Многие поздние игры, использующие систему сжатия MEGAPACK, применяли bit-packing, который требовал динамической генерации кода распаковки в RAM.