This repo contains code derived from binutils'es libopcodes, v.2.42. That said,
if you fork the code, be sure to license the fork under the GPL v3.
The goal is to generate a JSON file describing ARM64 instructions to be able to decode some in a way that might be not as pretty as what a disassembler produces yet accurate enough for hobbyist/non-professional/educational use.
Building a backend for TableGen or fiddling with the capstone's fork of
it felt like a larger investment than it is needed for achieving that goal.
The result JSON file is generated by aarch64-insn-dump.cpp, a quick'n'dirty C++ script-like program (with manual JSON serialization, a shame, really) whose output is formatted with jq. This utility can be used for filtering and queries, too.
To produce the result file, you'll need to use Cmake, no special sauce has been
needed at least under macOS and Fedora Linux when using llvm-clang.
There are no guarantees of any kind about the content of the result file.
You are using it at your own risk; any losses related to using it are on you
and you only. You sure can keep the profits to yourself either :).
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER=c++ ..
make./tools/dump/aarch64-insn-dump | jq "."These are very mature projects with a much broader scope, rigorous testing, overwhelming coverage, and bindings in various languages:
- Capstone & its LLVM TableGen fork
- LLVM & TableGen
- Qemu - Quick emulator
- Unicorn
- Binutils & libopcode
- Binary Ninja ARM64 plugin
Not a library/API-centric, yet the one and only
Although only x86_64 targeted, nonetheless an incredible one: