Releases: Ledger-Donjon/absolution
Releases · Ledger-Donjon/absolution
v1.1.2
v1.1.1
v1.1.0
Absolution 1.1.0
What's new
Features
.whole_valuesfield domain — Constrain array-shaped fields with full-instance byte blobs (dense and strided layouts), unified with other constrained-domain selector rules; fixes emission for strided struct members and aligns fuzzer byte accounting.- Version information — Release builds now embed version information.
CI
- Harden
setup-zig: minimum Zig version is now validated before download. - Toolchain archives are verified with minisig.
- Drop redundant checkout step and the Astral/uv dependency from the pipeline.
- Disable CPU-specific optimizations in CI release builds.
What is Absolution?
Absolution parses globals from C translation units and emits a libFuzzer harness that:
- Samples global state from fuzzer input (with domain constraints)
- Calls your test harness
- Checks invariants (including padding zeroed)
This helps find bugs across different interleavings of calls, as long as the fuzzer can cover the space.
Requirements
- Zig 0.15.2
- C toolchain with libFuzzer (e.g.
clang -fsanitize=fuzzer) - objcopy (GNU binutils or
llvm-objcopy)
Full Changelog: v1.0.0...v1.1.0
v1.0.0
Absolution 1.0.0
First stable release of Absolution, a tool for fuzzing C programs by sampling global state uniformly from an invariant.
What is Absolution?
Absolution parses globals from C translation units and emits a libFuzzer harness that:
- Samples global state from fuzzer input (with domain constraints)
- Calls your test harness
- Checks invariants (including padding zeroed)
This helps find bugs across different interleavings of calls, as long as the fuzzer can cover the space.
Features
- Invariant language —
.zoninvariants constrain field domains (.top,.values,.pointers) - CMake integration —
absolution_add_fuzzer()handles the full pipeline (parse → compile → objcopy → link) - Multi-translation-unit support — Symbol redefinition for
staticglobals across TUs - Configurable harness — Custom entry function via
--entry - Export and edit — Dump parsed modules to
.zonfor manual editing before emission - Transitive propagation — LINK_LIBRARIES propagate includes/defines to all stages
- Sanitizer support — Default
fuzzer,address; configurable per fuzzer target
Requirements
- Zig 0.15.2
- C toolchain with libFuzzer (e.g.
clang -fsanitize=fuzzer) - objcopy (GNU binutils or
llvm-objcopy)
Quick start
zig build
./zig-out/bin/absolution -h
./zig-out/bin/absolution \
-t module_a.c -t module_b.c \
--entry MyTestOneInput \
--out fuzzer.c --redef fuzzer.redef --seed fuzzer.seed \
-- -I path/to/includeSee README.md and USAGE.md for the full workflow. The example/protocol_parser/ directory shows a complete CMake integration example.
Full Changelog: https://github.com/Ledger-Donjon/absolution/commits/v1.0.0