#arm64 #disassembler #api-bindings #armv8 #binja

no-std bad64

Rust bindings for Binja's arm64 disassembler

21 releases

0.10.0 Feb 23, 2025
0.9.0 Nov 30, 2023
0.8.0 Nov 29, 2023
0.6.0 Dec 22, 2021
0.2.0 Mar 31, 2021

#814 in Encoding

Download history 4/week @ 2024-11-13 16/week @ 2024-11-20 64/week @ 2024-11-27 416/week @ 2024-12-04 227/week @ 2024-12-11 65/week @ 2024-12-18 13/week @ 2024-12-25 97/week @ 2025-01-01 51/week @ 2025-01-08 59/week @ 2025-01-15 27/week @ 2025-01-22 22/week @ 2025-01-29 78/week @ 2025-02-05 32/week @ 2025-02-12 170/week @ 2025-02-19 111/week @ 2025-02-26

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

Apache-2.0

530KB
3K 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

~3.5–6.5MB
~148K SLoC