ddisasm es un desensamblador de código abierto desarrollado por GrammaTech que convierte binarios en código ensamblador lo suficientemente preciso como para ser reensamblado. La herramienta está implementada con el lenguaje de programación lógica declarativa Datalog, concretamente sobre el motor Soufflé, lo que permite compilar reglas y heurísticas de desensamblado para mejorar la precisión.
Su flujo de trabajo parte del análisis de la cabecera del binario (ELF en Linux o PE en Windows) y de la decodificación de un superconjunto de instrucciones candidatas, generando hechos en Datalog. A partir de ellos identifica ubicaciones de código, símbolos y límites de funciones. El resultado se traduce a GTIRB, una representación intermedia específica para análisis binario e ingeniería inversa. Sobre GTIRB se pueden aplicar modificaciones programáticas mediante la librería gtirb-rewriting y, finalmente, volcar el binario modificado a través de gtirb-pprinter, que genera el ensamblador y delega en el compilador (gcc u otro) para producir el nuevo ejecutable.
ddisasm soporta seis arquitecturas: x86 de 32 y 64 bits, ARM32, ARM64 y MIPS32. Se distribuye como imagen Docker oficial (grammatech/ddisasm:latest) y se acompaña de ejemplos listos para ejecutar. La documentación completa está disponible en gramatech.github.io/ddisasm. El proyecto cuenta con publicaciones académicas asociadas, entre ellas el artículo "Datalog Disassembly" (USENIX Security 2020) y trabajos más recientes en IEEE S&P 2025 sobre desensamblado como planificación de intervalos ponderados con pesos aprendidos.
