DecompilerAI

Neural C Decompiler

Upload a binary executable file, get readable, compilable and functional equivalent C code. No setup, just results.

Compilable Output0.74 compilation rate on HumanEval
Functional Equivalence0.57 pass rate on HumanEval
Semantic ClarityHigh readability achieved by high similarity metrics
Workflow FriendlyChat with an reverse engineer AI specialist
Recovered from x86_64 ELF
// Decompiled with DecompilerAI
#include <stdio.h>

int findMSBPosition(int a) {
    int i, k = 0;
    if (a == 0)
        return -1;
    for (i = 0; i < 32; i++) {
        if ((a >> i) & 1) { k = i; }
    }
    return k;
}

int main() {
    int a = 37;
    printf("MSB position of %d: %d\n", a, findMSBPosition(a));
    return 0;
}
Why DecompilerAI

Accuracy, Explainability, Speed

Neural Decompilation

We leverage costum trained AI-models to yield explainable high-level C code currently for any non-obfuscated x86 binary program compiled via clang or gcc.

LLM-Assisted Decompilation

We leverage various tools like traditional decompilers and LLMs (DeepSeek, OpenAI, ...) to yield explainable clean code.

Readability

We target to deliver readable source code. Appropiate function/variable names, types, and comments help users understand the high-level source code in a faster fashion.

Compilability

Unlike traditional decompilers (e.g. Ghidra, IDA Pro HexRays Decompiler, ...) that yield pseudocode, we target to deliver compilable source code. We deliver the source code along instructions to build the program from scratch.

Functional Correctness

We target to deliver source code that is functionally correct. The input and output behaviour of the target and decompiled program should be identical.

Seamless Upload

Drag-and-drop binary executable files and request decompilation right away. ELF today; PE & Mach-O on the roadmap.

How it works

Bytes In. Readable Code Out. Just 3 Steps.

1

Upload

Submit a binary (ELF, x86/x86_64). We fingerprint compiler/flags and extract metadata.

2

Wait

We analyze the uploaded file, run the file trough the pipeline, and respond with a possible decompilation as source code attachment.

3

Validate

Validate the quality of the decompilation.

Demo

BENCHMARKS

Repository Complexity

Benchmark .c/.h SLOC/fn CC CG depth FI/FO LC
HumanEval 164 39.93 3.44 1.00 0.88 0.73
ExeBench 222 25.39 1.72 0.25 0.20 0.86
Random GitHub 1776 2312.29 37.85 2.06 1.29 -
Coreutils 1680 132.47 8.34 9.93 2.04 0.75
OpenSSL 1795 251.17 6.06 31.49 2.79 0.66
FFmpeg 4336 284.98 7.29 18.39 2.54 0.09

SLOC/fn = source lines of code per function, CC = cyclomatic complexity, CG depth = average call-graph depth, FI/FO = average fan-in/fan-out, LC = GCOV line coverage.

Compilation, Pass Rate, and GCOV Coverage

Decompiler Benchmark Metric Baseline Test Suite DecEvalSe
O0 O1 O2 O3 AVG O0 O1 O2 O3 AVG
Ghidra+
LLM4Decompile
HumanEval Compilation Rate 0.870.800.850.810.83 0.870.810.840.810.84
Pass Rate 0.690.460.470.460.52 0.670.410.420.400.48
GCOV 0.730.680.660.550.66 0.860.810.800.820.82
ExeBench Compilation Rate 0.630.420.420.420.47 0.630.420.420.420.47
Pass Rate 0.440.290.290.280.33 0.410.280.280.270.31
GCOV 0.860.870.850.880.87 0.900.890.890.890.89

HumanEval ratios are computed over 116 functions. ExeBench ratios are computed over 500 functions. The baseline consists of handwritten tests for HumanEval and randomized DecEvalRand tests for ExeBench.

Complex Repositories at O0

Decompiler Repository Comp. Rate Pass Rate KLEE-IC GCOV-LC Time [h]
Ghidra+
LLM4Decompile
HumanEval0.870.670.330.860.3
Coreutils0.710.670.270.752.7
OpenSSL0.480.250.360.862.5
FFmpeg0.610.450.290.906.4
Ghidra+
SK2Decompile
HumanEval0.880.760.330.851.1
Coreutils0.500.460.280.723.2
OpenSSL0.400.210.330.783.0
FFmpeg0.550.420.290.899.8
Ghidra+
Idioms
HumanEval0.760.650.330.861.2
Coreutils0.460.450.320.913.6
OpenSSL0.380.190.280.753.4
FFmpeg0.440.350.270.9310.0

For the complex-repository setup, the paper evaluates Coreutils 9.7, OpenSSL 3.0.15, and FFmpeg 7.1.3, with up to 500 functions per executable.

Evaluation Details

Exact decompiler configurations used for the evaluation: LLM4Decompile with the Ghidra-refined approach and the LLM4Decompile-Ref-6.7B checkpoint; SK2Decompile with the sk2decompile-struct-6.7b and sk2decompile-ident-6.7b checkpoints; Idioms with the opt-O0-codegemma-7b-neighbors checkpoint. The setup also uses Ghidra 11.0.3 PUBLIC, clang-format 21.0.0git, and angr 9.2.102.

Evaluation sample sizes: 116 functions from HumanEval, 500 functions from ExeBench test_real, and for the complex repository study, 500 functions per executable.

Supported function coverage includes pointer-based inputs, pointer-based return values, functions without return values via observable side effects, and functions reading from standard input. More complex cases such as nested pointers, multidimensional arrays, and deeply nested structs can exceed the default model, so some functions may be excluded or only partially analyzed.

For benchmark descriptions, it is most accurate to refer to these counts as evaluated functions or an evaluation subset, rather than implying a complete denominator over all theoretically supported signatures.

Supported Platforms & Features

Category Supported
Compilers
  • GCC
  • Clang
Architectures
  • x86
  • x86_64
Binary Formats
  • ELF
FAQ
Is my uploaded program & retrieved code private?

Within our pipeline your program, retrieved decompilation, and any other interaction is processed securely. Nevertheless, for the final step we do forward it to OpenAI's LLM models for code cleaning purposes.

Will we add support for other architectures, file formats and languages in the future?

If there is demand, then for sure!

How did we develop this neural decompiler?

We plan to be more transparent on this matter in near future by explaining in a blog what someone needs to develop one. In the end, we trained a seq2seq model to translate machine code back to high-level source code.

Get started!