Capstone Disassembler Framework
github.com
github.com
I wrote a differential fuzzer for x86 decoders a few years ago, and XED and Zydis generally performed far better (in terms of accuracy) than Capstone[1]. And on the Rust side, yaxpeax and iced-x86 perform very admirably.
[1]: https://blog.trailofbits.com/2019/10/31/destroying-x86_64-in...
If I remember correct, the Intel SDM alone is over 3000 pages long.
Looking at the libs, none of them seem to mention ARM64 inst. decoding.
Someone (not me) has also cross-compiled Capstone to WebAssembly so it can be used in client-side browser applications.
https://alexaltea.github.io/capstone.js/
I've used this in a couple of projects to support disassembly in static web apps with no back end.
This is a useful page to get a sense of what it's about (ie, what you're getting out of it vs. something more like objdump):
https://github.com/unicorn-engine/unicorn
Also, if anyone is interested in an example of using capstone for basic disassembly and analysis, here is a link to my capstool project.
* Capstone: disassembly.
* Keystone: assembler.
* Unicorn: CPU emulator.
Upcoming v6 release (current 'next' branch) of the capstone updated SystemZ (S390) significantly, so it should work even better now.
In comparison to capstone, nyxstone lacks the features of instruction decomposition and providing read/written registers. In addition, nyxstone directly interfaces with LLVM and thus is expected to be a lot slower than capstone, which uses instruction tables generated by a modified LLVM.
I want to note here that Nyxstone is intended more as a replacement for Keystone than Capstone. We added the disassembler mainly because we could. Compared to Keystone, nyxstone allows precise definition of target triple and ISA extensions, allows definition of external labels, supports structured output with instruction details (address, bytes, assembly), rejects partial and invalid inputs and rejects instructions not supported by the specific core (for example UMAAL is supported by Cortex-M4, but not by Cortex-M3), and is more up to date. Nyxstone does not require patches in the LLVM source tree, and thus is (I'd argue) more maintainable and easier to keep up to date.
[1] https://github.com/capstone-engine/capstone/blob/next/suite/...
[2] https://github.com/capstone-engine/capstone/blob/next/docs/A...