Disassembly as Weighted Interval Scheduling with Learned Weights
Antonio Flores-Montoya, Junghee Lim, Adam Seitz, Akshay Sood, Edward Raff, James Holt
TL;DR
This work tackles static disassembly across multiple ISAs by reframing conflict resolution as a Weighted Interval Scheduling (WIS) problem and by learning heuristic weights via linear programming with soft constraints. It introduces a three-phase pipeline (candidate generation, block weighting, and conflict resolution) that is extended to x86, x64, arm32, and aarch64, including data-block handling, jump-table detection, and prefix-enclosed instruction analysis. The weight-learning component uses ground-truth binaries to infer symbolic weights, solves an LP to maximize satisfied constraints, and demonstrates comparable precision with improved recall on several datasets while drastically reducing the number of active heuristics. Experimental results show high disassembly accuracy and practical runtime overhead, with learned weights generalizing to unseen binaries and often outperforming manually tuned weights. Overall, the approach advances reliable, multi-ISA disassembly for binary analysis and rewriting tasks, providing robust performance improvements and a scalable method for heuristic refinement.
Abstract
Disassembly is the first step of a variety of binary analysis and transformation techniques, such as reverse engineering, or binary rewriting. Recent disassembly approaches consist of three phases: an exploration phase, that overapproximates the binary's code; an analysis phase, that assigns weights to candidate instructions or basic blocks; and a conflict resolution phase, that downselects the final set of instructions. We present a disassembly algorithm that generalizes this pattern for a wide range of architectures, namely x86, x64, arm32, and aarch64. Our algorithm presents a novel conflict resolution method that reduces disassembly to weighted interval scheduling.
