Formal verification of binaries

Reasoning about software at the level of the machine.

The Low-Level Reasoning Machine lifts higher-level, provably-equivalent models from machine code — then verifies their security properties with machine-checked proofs. No source code required.

x86-64aarch64Isabelle/HOLbottom-up verificationFoxDeclibLISA
Control-flow graph lifted from OpenSSH by FoxDec
// control-flow graph lifted from the OpenSSH binary by the FoxDec verified decompiler
the approach

Low-level reasoning is motivated by settings where source or library code is unavailable, where build processes have decayed, and where errors must be patched fast — while keeping the trusted computing base small (it excludes compilers, linkers, and runtimes). Formalizing instruction-set semantics is far more tractable than formalizing programming-language semantics, which is what makes verifying software from the binary up possible. Read the full approach →

ongoing thrusts

Instruction semantics

Formal, machine-validated semantics for x86 and ARMv8 — recovered automatically rather than written by hand.

Verified decompilation

Lifting stripped binaries to assembly, IR, and C that is provably equivalent to the original.

Weird machines

Reasoning about the weird machines behind memory-corruption exploits, via formal memory-usage certificates.

Sound disassembly & ARMv8

Validating disassemblers without a ground truth, and verifying ARMv8 binaries.

news
2026.07
Paper on abstract interpretation for exception-aware function summaries in binaries accepted at SCAM’26.
2026.05
Paper on an extended ELF format accepted at QRS’26.
2026.05
Paper on a full-system x86 simulator accepted at QRS’26.
2026.05
Invited talks on binary verification at Science Tokyo and Kyoto University.

see all news →