Tool
Ddisasm
GrammaTech's Datalog disassembler, which turns ELF and PE binaries for x86-32, x86-64, ARM32, ARM64 and MIPS32 into the GTIRB intermediate representation. It decodes a superset of possible instructions, then applies Soufflé Datalog rules and weighted heuristics to infer code locations, symbolization and function boundaries; gtirb-pprinter turns the result into reassemblable assembly or a rebuilt binary, and the GTIRB APIs or gtirb-rewriting can modify it in between. User hint files add Datalog facts or change heuristic weights where inference goes wrong.
Requirements and limitations
- Latest GitHub release at review: v1.8.0, published 2023-12-14 without attached files. Later versions are distributed elsewhere: PyPI lists ddisasm 1.9.5, uploaded 2026-07-06 as a single manylinux x86_64 wheel. The reviewed main commit, from 2026-10-13, declares version 1.9.6, which its changelog marks unreleased.
- Prebuilt options are the grammatech/ddisasm Docker image (stable or unstable tags), Ubuntu 20 (focal) apt packages and Windows .zip builds on GrammaTech's servers; the docs warn against mixing stable and unstable tools. Source builds need a C++17 compiler, GTIRB 1.12.1+, gtirb-pprinter 2.0.0+, Capstone 5.0.1+ (GrammaTech tests with its fork), Soufflé 2.4 built with 64-bit numbers, libehp 1.0.0+ and LIEF 0.13.2+.
- Input is an ELF or PE binary; rebuilding through gtirb-pprinter invokes a compiler or assembler such as gcc. Code inference and symbolization are heuristic: --self-diagnose checks symbolization only for binaries linked with complete relocation information, and the docs call the option that replaces CFI directives with .eh_frame symbolic expressions experimental and unreliable.
- AGPL-3.0; contributions require GrammaTech's contributor license agreement. GTIRB, gtirb-pprinter and gtirb-rewriting are separate projects that were not reviewed. The README cites a USENIX Security 2020 paper and an IEEE S&P 2025 paper on the approach; their results are not restated here. No binaries were disassembled.
About this entry
- Type
- Tool
- Category
- Native analysis tools
- Relationship
- Foundation tool
- Targets
- Binary
Sources reviewed
The description was reviewed against primary sources. This does not establish runtime testing, security auditing or verified compatibility.
Primary sources
- README.md GitHub · GrammaTech/ddisasm · Revision 1d17f29
- doc/source/GENERAL/1-Installation.md GitHub · GrammaTech/ddisasm · Revision 1d17f29
- doc/source/GENERAL/2-Building-Ddisasm.md GitHub · GrammaTech/ddisasm · Revision 1d17f29
- doc/source/GENERAL/3-Command-line-options.md#L38-L53 GitHub · GrammaTech/ddisasm · Revision 1d17f29
- doc/source/GENERAL/5-AdvancedUsage.md GitHub · GrammaTech/ddisasm · Revision 1d17f29
- CHANGELOG.md GitHub · GrammaTech/ddisasm · Revision 1d17f29
- version.txt GitHub · GrammaTech/ddisasm · Revision 1d17f29
- CONTRIBUTING.md GitHub · GrammaTech/ddisasm · Revision 1d17f29
- LICENSE.txt GitHub · GrammaTech/ddisasm · Revision 1d17f29
- https://github.com/GrammaTech/ddisasm/releases/tag/v1.8.0
- https://pypi.org/project/ddisasm/1.9.5/
- https://www.usenix.org/conference/usenixsecurity20/presentation/flores-montoya