То, что вы ищете, называется «детектором клонов». Вы можете сделать это с помощью исходного кода или объектного кода. Основная идея состоит в том, чтобы решить, какие точки изменчивости вы хотите принять.
Вы можете прочитать о нашем детекторе клонов CloneDR , который находит дублированный код, сравнивая синтаксические деревья исходных файлов, находя точные совпадения и совпадения. Это относится ко многим файлам, а не только к одному исходному файлу. Это похоже на обнаружение «общего подвыражения», но оно работает как с объявлениями, так и с исполняемым кодом. Когда совпадение не точное, оно может определить параметры для «подпрограммы» (абстракция).
См. Мою статью о Обнаружении клонов с использованием абстрактных синтаксических деревьев для алгоритмического описания.
CloneDR делает это для многих языков, используя синтаксический анализатор с точным языком .
Сайт описывает, как работает CloneDR, и сравнивает CloneDR с рядом других инструментов обнаружения клонов.
CloneDR не обрабатывает "переупорядочение команд". Менее масштабируемые методы, которые находят дубликаты путем сравнения PDG, могут сделать это. Они очень близки к сравнению графиков потоков данных, которые могут быть полезны для поиска совпадений кода машинной инструкции.