19 ms·
Another good replacement for capstone/keystone based on LLVM is nyxstone https://github.com/emproof-com/nyxstone https://github.com/emproof-com/nyxstone
by nicolodev 2y ago
Another good replacement for capstone/keystone based on LLVM is nyxstone https://github.com/emproof-com/nyxstone https://github.com/emproof-com/nyxstone
- ashvardanian 2y agoIt looks pretty promising! How would you compare the strengths/weaknesses?
- stuxnot 2y agoFull disclosure, I'm one of the nyxstone developers - so I might be biased. 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.
- xvilka 2y agoIt's just a wrapper around LLVM. So any project would be forced to ship also the corresponding LLVM version, if it's not present on the system - e.g. for Windows or embedded applications. A bit too much for a simple disassembler. So it's not a direct replacement for Capstone.
- saagarjha 2y agoThat's basically what Capstone is? Except not vendoring its own LLVM.
- xvilka 2y agoCapstone doesn't vendor LLVM either. It just contains some pieces of the LLVM-ish infrastructure that were converted from C++ to the pure C and are pretty lean, without any external dependency.