Este artículo del blog de Chris Lewis detalla la evolución de un flujo de trabajo para la descompilación de código, específicamente enfocado en el juego Snowboard Kids 2 para Nintendo 64. Inicialmente, el proceso se basaba en priorizar funciones a descompilar según su dificultad estimada, utilizando un modelo de regresión logística. Sin embargo, este enfoque se estancó al enfrentarse a funciones inherentemente complejas. La clave para desbloquear el progreso fue la introducción de la búsqueda de funciones similares, inspirada en el trabajo de Macabeus con incrustaciones de texto de instrucciones de ensamblaje.
La técnica principal consiste en identificar funciones con contrapartes similares, permitiendo a Claude (un modelo de lenguaje grande) reutilizar patrones y referencias de código previamente descompilados. Esto resultó ser significativamente más efectivo que la priorización basada en la dificultad. El autor implementó una herramienta para calcular esta similitud, inicialmente con una combinación manual de factores, pero luego simplificándola a una solución basada en la distancia de Levenshtein (Coddog), que demostró ser igual de efectiva y más eficiente.
El proyecto también incorporó herramientas especializadas como gfxdis.f3dex2 para manejar el microcódigo específico del chip gráfico Reality Display Processor (RDP) y un 'permuter' para optimizar el código. Sin embargo, el permuter, diseñado para realizar pequeñas mutaciones en el código con la esperanza de encontrar una coincidencia perfecta, demostró ser contraproducente, introduciendo artefactos y dificultando la depuración y el mantenimiento del código. Finalmente, se eliminó el permuter y se priorizó la limpieza y documentación del código, ya que estas acciones mejoraron la calidad de las referencias para futuras descompilaciones.
El artículo destaca la importancia de herramientas especializadas y la optimización del flujo de trabajo en proyectos de descompilación con modelos de lenguaje. La limpieza del código, aunque no mejora directamente la tasa de coincidencia, proporciona mejores ejemplos para Claude, permitiéndole aprender y aplicar patrones de manera más efectiva. El uso de 'skills' de Claude, como la referencia a comandos F3Dex2, también demostró ser crucial para el éxito del proyecto.
