- 100% rewrite, complete rework of the public interface
- C99 instead of C++11
- Added support for pretty much any X86 ISA extension in existence
- If something implemented in hardware somewhere isn’t supported, that’s a bug
- Tons and tons of information for each instruction
- Side effect information for flags and implicit registers
- Optional, extra info can be omitted at compiler time
- Even with all info enabled, a statically linked MACH-O binary hovers around 250KB
- Zero dynamic memory allocation
- Faster and smaller than any other open source disassembler we compared against
- We’ll release benchmark results once we head towards final
- Encoding support (won’t make it into v2.0, we expect it to be around with v2.1)
Why “downgrade” to C?
One of the goals of this project is to make it available to the greatest audience possible. Consequently, bindings to other common languages are important to us. While binding C++ libraries to languages like Python is possible by going the detour of writing a C-style wrapper interface first, then using that interface in the target language bindings, it’s pretty ugly. Since the lib never really used a whole lot of C++ features anyways, we decided to go a step further and just switched completely. Aside from the bindings, this also allows using it in drivers and a greater spectrum of embedded space.
Is the interface stable, yet?
Nope! With this alpha release, we’d like to ask the community for a final comment on our public interface before finalizing it and calling it stable. There’s a thread on reddit, a Gitter room and you’re also welcome to create issues on GitHub
Whats missing in the alpha?
- The instruction table editor GUI application isn’t ready for release yet (will receive a dedicated repo)
- Encoding isn’t fully implemented, yet (probably won’t be around before v2.1)
- CMake feature gates currently do nothing (always include everything)
- Foreign language bindings