#arm64 #arm-v8 #disassembler #binja

no-std bad64

Rust bindings for Binja's arm64 disassembler

23 unstable releases (11 breaking)

Uses new Rust 2024

0.12.0 Oct 24, 2025
0.10.0 Feb 23, 2025
0.9.0 Nov 30, 2023
0.6.0 Dec 22, 2021
0.2.0 Mar 31, 2021

#540 in Encoding

Download history 51/week @ 2025-08-29 79/week @ 2025-09-05 80/week @ 2025-09-12 51/week @ 2025-09-19 131/week @ 2025-09-26 175/week @ 2025-10-03 54/week @ 2025-10-10 47/week @ 2025-10-17 430/week @ 2025-10-24 32/week @ 2025-10-31 39/week @ 2025-11-07 39/week @ 2025-11-14 38/week @ 2025-11-21 68/week @ 2025-11-28 83/week @ 2025-12-05 126/week @ 2025-12-12

326 downloads per month
Used in 5 crates (2 directly)

Apache-2.0

550KB
4.5K SLoC

Contains (ELF exe/lib, 40KB) res/id

Binja Arm64 Disassembler

Build Status Latest Version Latest Docs

These are bindings to the Binary Ninja arm64 architecture/disassembler plugin.

Note that while Binary Ninja is an (excellent) commercial product, the disassembler is entirely Apache 2 licensed and may be used without a license. To install, just add bad64 as a normal dependency in Cargo.toml.

For more information on how this disassembler was created, see this blogpost by Andrew Lamoureux.

For docs and usage, please see docs.rs and the examples.

$ cargo run --example decode 0x91010420
Instruction {
    address: 0x1000,
    opcode: 0x91010420,
    op: ADD,
    num_operands: 0x3,
    operands: [
        Reg {
            reg: X0,
            arrspec: None,
        },
        Reg {
            reg: X1,
            arrspec: None,
        },
        Imm64 {
            imm: Unsigned(
                0x41,
            ),
            shift: None,
        },
    ],
    flags_set: None,
}
add x0, x1, #0x41

Dependencies

~5–7.5MB
~174K SLoC