Lo que está buscando se llama "detector de clonación". Puede hacer esto en el código fuente o en el código objeto. La idea clave es decidir qué puntos de variabilidad quieres aceptar.
Puede read about our CloneDR detector de clonación, que encuentra el código duplicado mediante la comparación de los árboles de sintaxis de los archivos fuente, encontrando coincidencias exactas y cuasimilitudes. Lo hace a través de muchos archivos en lugar de solo dentro de un archivo fuente. Esto es algo así como la detección de "subexpresión común", pero funciona tanto en declaraciones como en código ejecutable. Cuando la coincidencia no es exacta, puede determinar los parámetros para la "subrutina" (abstracción).
Consulte mi artículo en Clone Detection Using Abstract Syntax trees para obtener una descripción algorítmica.
CloneDR hace esto para muchos idiomas, usando language-precise front end parsers.
El sitio describe cómo funciona CloneDR y compara CloneDR con otras herramientas de detección de clones.
CloneDR no maneja "reordenamiento de instrucciones". Los métodos menos escalables que encuentran duplicados mediante la comparación de PDG pueden hacer esto. Estos se acercan bastante a la comparación de gráficos de flujo de datos, lo que podría ser útil para encontrar coincidencias de código de instrucción de máquina.
Tal vez fenris http://lcamtuf.coredump.cx/fenris/whatis.shtml o alguna otra herramienta de ingeniería inversa lo hace? – ninjalj