Overview
Thedecompile.rs example shows how to:
- Initialize Binary Ninja in headless mode
- Load and analyze binaries programmatically
- Extract decompiled code (Pseudo C)
- Configure disassembly settings
- Process functions automatically
Complete Source Code
Key Concepts Explained
let headless_session = binaryninja::headless::Session::new()
.expect("Failed to initialize session");
tracing_subscriber - Rust’s logging infrastructureTracingLogListener - Bridges Binary Ninja logs to Rust tracingheadless_session.load() - Opens file and runs full analysisBinaryView reference for further processinglet settings = DisassemblySettings::new();
settings.set_option(DisassemblyOption::ShowAddress, false);
settings.set_option(DisassemblyOption::WaitForIL, true);
settings.set_option(DisassemblyOption::IndentHLILBody, false);
settings.set_option(DisassemblyOption::ShowCollapseIndicators, false);
settings.set_option(DisassemblyOption::ShowFunctionHeader, false);
ShowAddress - Include/exclude address prefixesWaitForIL - Wait for full IL analysis before renderingIndentHLILBody - Control indentationShowCollapseIndicators - UI collapse markersShowFunctionHeader - Function signature headers"Pseudo C" - High-level decompiled output"LLIL", "MLIL", "HLIL", "Disassembly"let mut cursor = linear_view.create_cursor();
cursor.seek_to_address(func.highest_address());
let last = view.get_next_linear_disassembly_lines(&mut cursor.duplicate());
let first = view.get_previous_linear_disassembly_lines(&mut cursor);
let lines = first.into_iter().chain(&last);
for line in lines {
tracing::info!("{}", line);
}
Building and Running
Cargo.toml Configuration
Building
Running
Expected Output
Advanced Automation Patterns
Batch Processing Multiple Files
Extract Specific Functions
Export Analysis Results
Wait for Analysis Completion
Custom Analysis Settings
Python Headless Automation
For Python-based automation:Use Cases
- Batch Decompilation - Decompile entire codebases automatically
- Malware Analysis - Automated triage and feature extraction
- Vulnerability Research - Pattern matching across binaries
- Code Metrics - Collect statistics from large binary sets
- Regression Testing - Verify analysis across Binary Ninja versions
- Integration - Connect Binary Ninja to CI/CD pipelines
- Research - Large-scale binary analysis experiments
Performance Considerations
Optimize Analysis Speed
Parallel Processing
Memory Management
Related Examples
- Basic Analysis - Core analysis concepts
- Function Iteration - Working with functions
- IL Parsing - IL-level analysis
- Workflow Extension - Custom analysis workflows