Fission

Reading Decompiler Output

This page explains what kind of output you should expect from Fission at a conceptual level: how lifted semantics flow through normalization and structuring into rendered pseudocode.

It does not restate full IR definitions—those belong in the architecture documentation.

Pipeline mental model

At a high level:

  1. Lift: Machine instructions are decoded and lifted into low-level IR with explicit control-flow skeleton facts (Sleigh-driven semantics).
  2. Normalize: The Rust-owned pipeline canonicalizes and simplifies representations toward NIR (normalized IR) suitable for deterministic transforms.
  3. Structure: Graph-theoretic structuring recovers high-level control constructs and prepares HIR-oriented views where applicable.
  4. Render: The printer emits pseudocode (text or structured payloads such as JSON when using --json on the CLI).

Think of CLI pseudocode as the surface projection of deeper IR stages—not every IR detail appears verbatim in text output.

Text vs structured CLI output

Names, symbols, and types

Rendered identifiers may combine recovered symbols, synthetic labels, and type hints inferred from analysis passes. Precision varies by binary richness (DWARF/PDB exports vs stripped binaries).

When comparing across tools, align on address-level identity first (list, disasm), then compare structured shape—not only Pretty-printed spelling.

Determinism and automation

Outputs that feed snapshots, automation lanes (nir-check), or benchmarks are designed to be deterministic under fixed toolchain + corpus inputs. If you observe drift, capture inputs (binary hash, CLI version, flags) before concluding a semantic regression—see Performance triage.