Трудность здесь состоит в том, что, так как Вы имеете дело с исполняемым кодом, простые изменения могут распространить через весь ROM. Адреса и смещения для ВСЕХ значений могут измениться с добавлением единственной переменной или пустой команды. Это сделает даже основанное на блоке хеширование бесполезным.
А быстрое-и-грязное решение состояло бы в том, чтобы изрубить решение с difflib (или эквивалентный w/Ваш любимый язык), так как это получает Вас скользящее сравнение, которое может иметь дело с дополнением данных или удалением. Разделите ROM на исполняемый файл и разделы данных (если возможный). Раздел данных может быть сравнен непосредственно и , отношение подобия вычислило , хотя у Вас все еще будут проблемы w/адресами или смещениями.
исполняемый раздел более интересен. Читайте на формате asm машины, возьмите исполняемый файл и разделите его на последовательность кодов операций. Оставьте код операции и части регистра, но маска от "полезной нагрузки" / "непосредственные" части (где это загружает переменные адреса). Вручите получающуюся информацию калькулятору отношения подобия также.
неудачная часть - то, что это - все еще O (n^2) операция на количестве ROMs, который Вы отслеживаете, но это может быть облегчено с (возрастающей) кластеризацией или основанным на частоте порядком сравнения уменьшить сумму необходимых сравнений.
Вы также можете проверить это так:
if(function_exists('a_function_you_know_the_module_provides')) { }