Assembler is an application that compiles a string of assembly code and returns instruction encodings. An assembler framework allows us to build new tools, and is a fundamental component in the Reverse Engineering (RE) toolset. However, a good assembler framework is sorely missed since the ice age! Indeed, there is no single multi-architecture, multi-platform and open source framework available and the whole RE community are badly suffering from this lingering issue.
We have decided to step up again to solve this challenge once and for all. We built Keystone, an assembler engine with unparalleled features:
– Multi-architecture, with support for Arm, Arm64 (AArch64/Armv8), Hexagon, Mips, PowerPC, Sparc, SystemZ, & X86 (include 16/32/64bit).
– Implemented in C/C++ languages, with bindings for Python, NodeJS, Ruby, Go, Rust, Haskell & Ocaml available.
– Native support for Windows & *nix (with Mac OSX, Linux, *BSD & Solaris confirmed).
– Thread-safe by design.
– Open source.
We are going to present the motivation, design & implementation of Keystone. The focus will be on technical decisions we made, and the challenges we had to overcome to realise the ideas behind our engine.
We believe that Keystone will turn a new page and open ways for many next generation RE tools in the future. Some cool tools built on top of Keystone will be shown to demonstrate its power. Keystone was already released with full source code, binary packages, documentation & tutorials. Find more information at www.keystone-engine.org