Обнаружьте, который другие модули включены в новом модуле Drupal

Трудность здесь состоит в том, что, так как Вы имеете дело с исполняемым кодом, простые изменения могут распространить через весь ROM. Адреса и смещения для ВСЕХ значений могут измениться с добавлением единственной переменной или пустой команды. Это сделает даже основанное на блоке хеширование бесполезным.

А быстрое-и-грязное решение состояло бы в том, чтобы изрубить решение с difflib (или эквивалентный w/Ваш любимый язык), так как это получает Вас скользящее сравнение, которое может иметь дело с дополнением данных или удалением. Разделите ROM на исполняемый файл и разделы данных (если возможный). Раздел данных может быть сравнен непосредственно и , отношение подобия вычислило , хотя у Вас все еще будут проблемы w/адресами или смещениями.

исполняемый раздел более интересен. Читайте на формате asm машины, возьмите исполняемый файл и разделите его на последовательность кодов операций. Оставьте код операции и части регистра, но маска от "полезной нагрузки" / "непосредственные" части (где это загружает переменные адреса). Вручите получающуюся информацию калькулятору отношения подобия также.

неудачная часть - то, что это - все еще O (n^2) операция на количестве ROMs, который Вы отслеживаете, но это может быть облегчено с (возрастающей) кластеризацией или основанным на частоте порядком сравнения уменьшить сумму необходимых сравнений.

6
задан HorusKol 6 October 2009 в 23:28
поделиться