bindiff-rs 0.1.8

Rust bindings to BinDiff
Documentation
<p align="center">
  <a href="https://github.com/blacktop/bindiff-rs"><img alt="Logo" src="https://github.com/blacktop/bindiff-rs/raw/main/logo.png" height="400" /></a>
  <h1 align="center">bindiff-rs</h1>
  <h4><p align="center">Rust library to interface with BinDiff</p></h4>
  <p align="center">
    <a href="https://github.com/blacktop/bindiff-rs/actions" alt="Actions">
          <img src="https://github.com/blacktop/bindiff-rs/actions/workflows/rust.yml/badge.svg" /></a>
    <a href="https://crates.io/crates/bindiff-rs" alt="Downloads">
          <img src="https://img.shields.io/crates/d/bindiff-rs" /></a>
    <a href="https://crates.io/crates/bindiff-rs" alt="Docs">
          <img src="https://img.shields.io/crates/v/bindiff-rs" /></a>
    <a href="http://doge.mit-license.org" alt="LICENSE">
          <img src="https://img.shields.io/:license-mit-blue.svg" /></a>
</p>
<br>

## Usage

```rust
use bindiff::BinDiff;

fn main() -> anyhow::Result<()> {
    let input_path = std::env::args().nth(1)
        .ok_or_else(|| anyhow::anyhow!("Please provide a path to a BinDiff file"))?;
    let bd = BinDiff::open(&input_path)?;

    // Read function matches
    let func_matches = bd.read_function_matches()?;
    for func_match in func_matches {
        println!("{:#?}", func_match);
    }

    Ok(())
}
```

## Install `bindiff-rs` binary

Via [homebrew](https://brew.sh)

```sh
brew install blacktop/tap/bindiff-rs
```

Via `cargo`

```sh
cargo install bindiff-rs
```

## Run `bindiff-rs`

Dump the BinDiff file metadata

```bash
❯ bindiff-rs path/to/BinDiff --info
```
```bash
FILE:
  id:               1
  filename:         kernel.release
  exe_filename:     kernel.release.t6020
  hash:             8a9f5d9305cec0a85bbaae3288ef3a5732bda406edcf20aa6edd9352fb555de0
  functions:        22140
  lib_functions:    0
  calls:            229914
  basic_blocks:     1037258
  lib_basic_blocks: 0
  edges:            1546378
  lib_edges:        0
  instructions:     4958934
  lib_instructions: 0

METADATA:
  version:      BinDiff 8 (@568181968, Sep 25 2023)
  file1:        1
  file2:        2
  description:
  created:      2025-01-12 23:51:57
  modified:     2025-01-12 23:51:57
  similarity:   0.99
  confidence:   0.99
```

Dump the BinDiff file function matches

```bash
❯ bindiff-rs path/to/BinDiff
```

```bash
memset_s:       similarity: 1.00, confidence: 0.99
timingsafe_bcmp:        similarity: 1.00, confidence: 0.99
cc_clear:       similarity: 1.00, confidence: 0.99
cc_disable_dit: similarity: 1.00, confidence: 0.97
ccdigest_init:  similarity: 1.00, confidence: 0.99
ccdigest_update:        similarity: 1.00, confidence: 0.99
cchmac: similarity: 1.00, confidence: 0.99
cchmac_init:    similarity: 1.00, confidence: 0.99
cchmac_update:  similarity: 1.00, confidence: 0.99
cchmac_final:   similarity: 1.00, confidence: 0.99
ccdigest_final_64be:    similarity: 1.00, confidence: 0.99
_ovbcopy:       similarity: 1.00, confidence: 0.99
_memmove:       similarity: 1.00, confidence: 0.99
_bzero: similarity: 1.00, confidence: 0.99
_memset:        similarity: 1.00, confidence: 0.99
<SNIP>
```

Dump the BinDiff file function matches in JSON format

```bash
❯ bindiff-rs path/to/BinDiff --json
```

```json
[
  {
    "id": 1,
    "address1": -2198902980608,
    "name1": "memset_s",
    "address2": -2198902980608,
    "name2": "memset_s",
    "similarity": 1.0,
    "confidence": 0.9933071490757153,
    "flags": 0,
    "algorithm": "NameHashMatching",
    "evaluate": false,
    "comment_supported": false,
    "basic_blocks": 6,
    "edges": 7,
    "instructions": 21
  },
  <SNIP>
]
```

## License

MIT Copyright (c) 2025 **blacktop**