[package]
edition = "2024"
rust-version = "1.93.1"
name = "libafl"
version = "0.16.0"
authors = [
"Andrea Fioraldi <andreafioraldi@gmail.com>",
"Dominik Maier <domenukk@gmail.com>",
]
build = "build.rs"
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Slot your own fuzzers together and extend their features using Rust"
documentation = "https://docs.rs/libafl"
readme = "README.md"
keywords = [
"fuzzing",
"testing",
"security",
]
categories = [
"development-tools::testing",
"emulators",
"embedded",
"os",
"no-std",
]
license = "MIT OR Apache-2.0"
repository = "https://github.com/AFLplusplus/LibAFL/"
resolver = "2"
[package.metadata.docs.rs]
features = ["document-features"]
all-features = true
rustc-args = [
"--cfg",
"docsrs",
]
[features]
afl_exec_sec = []
casr = [
"libcasr",
"std",
"regex",
]
cli = ["libafl_bolts/cli"]
cmin = ["dep:z3"]
corpus_btreemap = []
default = [
"derive",
"errors_backtrace",
"fork",
"gzip",
"libafl_bolts/xxh3",
"llmp_broker_timeouts",
"llmp_compression",
"llmp_small_maps",
"rand_trait",
"regex",
"serdeany_autoreg",
"simd",
"std",
]
derive = [
"libafl_derive",
"libafl_bolts/derive",
]
document-features = ["dep:document-features"]
errors_backtrace = ["libafl_bolts/errors_backtrace"]
fork = ["libafl_bolts/derive"]
frida_cli = [
"cli",
"libafl_bolts/frida_cli",
]
gzip = ["libafl_bolts/gzip"]
handle_sigpipe = []
intel_pt = [
"std",
"dep:libafl_intelpt",
"dep:nix",
"dep:num_enum",
]
intel_pt_export_raw = [
"intel_pt",
"libafl_intelpt/export_raw",
]
introspection = []
llmp_bind_public = ["ll_mp/llmp_bind_public"]
llmp_broker_timeouts = ["std"]
llmp_compression = [
"ll_mp/llmp_compression",
"libafl_bolts/gzip",
]
llmp_debug = [
"std",
"ll_mp/llmp_debug",
]
llmp_small_maps = ["ll_mp/llmp_small_maps"]
lua_mutator = ["mlua"]
multi_machine = [
"tokio",
"std",
"enumflags2",
"ahash/std",
"dep:send_wrapper",
]
multipart_inputs = [
"arrayvec",
"rand_trait",
]
nautilus = [
"std",
"serde_json/std",
"rand_trait",
"regex-syntax",
"regex",
]
nautilus_py = [
"nautilus",
"dep:pyo3",
]
prelude = ["libafl_bolts/prelude"]
prometheus_monitor = [
"std",
"tokio",
"axum",
"prometheus-client",
]
qemu_cli = [
"cli",
"libafl_bolts/qemu_cli",
]
rand_trait = ["libafl_bolts/rand_trait"]
regex = [
"std",
"dep:regex",
]
serdeany_autoreg = ["libafl_bolts/serdeany_autoreg"]
simd = [
"libafl_bolts/simd",
"libafl_bolts/wide",
]
statsd_monitor = [
"std",
"cadence",
]
std = [
"backtrace",
"bincode",
"dep:nix",
"fastbloom",
"fs2",
"libafl_bolts/std",
"ll_mp/std",
"serde_json",
"serde_json/std",
"serde/std",
"serial_test",
"typed-builder",
"uuid",
"wait-timeout",
]
tcp_compression = [
"tcp_manager",
"libafl_bolts/gzip",
]
tcp_manager = [
"tokio",
"std",
]
track_hit_feedbacks = ["std"]
tui_monitor = [
"ratatui",
"crossterm",
]
unicode = [
"libafl_bolts/alloc",
"ahash/std",
"serde/rc",
"bitvec",
]
value_bloom_feedback = [
"fastbloom",
"fastbloom/serde",
]
[lib]
name = "libafl"
path = "src/lib.rs"
[[example]]
name = "tui_mock"
path = "examples/tui_mock/main.rs"
required-features = [
"std",
"tui_monitor",
]
[dependencies.ahash]
version = "0.8.12"
default-features = false
[dependencies.arbitrary-int]
version = "2.1.1"
[dependencies.arrayvec]
version = "0.7.8"
optional = true
default-features = false
[dependencies.axum]
version = "0.8.9"
optional = true
[dependencies.backtrace]
version = "0.3.76"
optional = true
default-features = false
[dependencies.bincode]
version = "2.0.1"
features = ["serde"]
optional = true
[dependencies.bitbybit]
version = "2.0.1"
[dependencies.bitvec]
version = "1.1.1"
features = ["serde"]
optional = true
[dependencies.cadence]
version = "1.8.0"
optional = true
[dependencies.clap]
version = "4.6.5"
optional = true
[dependencies.const_format]
version = "0.2.36"
[dependencies.const_panic]
version = "0.2.15"
default-features = false
[dependencies.crossterm]
version = "0.29.0"
optional = true
[dependencies.document-features]
version = "0.2.12"
optional = true
[dependencies.enumflags2]
version = "0.7.12"
optional = true
[dependencies.fastbloom]
version = "0.17.0"
optional = true
default-features = false
[dependencies.fs2]
version = "0.4.3"
optional = true
[dependencies.hashbrown]
version = "0.17.1"
features = [
"serde",
"default-hasher",
"raw-entry",
]
default-features = false
[dependencies.libafl_bolts]
version = "0.16.0"
features = ["alloc"]
default-features = false
[dependencies.libafl_core]
version = "0.16.0"
default-features = false
[dependencies.libafl_derive]
version = "0.16.0"
optional = true
default-features = true
[dependencies.libafl_intelpt]
version = "0.16.0"
optional = true
default-features = true
[dependencies.libcasr]
version = "2.13.1"
optional = true
[dependencies.libm]
version = "0.2.16"
[dependencies.ll_mp]
version = "0.16.0"
default-features = false
[dependencies.log]
version = "0.4.33"
[dependencies.meminterval]
version = "0.4.2"
features = ["serde"]
[dependencies.mlua]
version = "0.12.0"
features = [
"lua54",
"vendored",
"macros",
]
optional = true
[dependencies.nix]
version = "0.31.3"
features = [
"signal",
"ptrace",
"personality",
"fs",
]
optional = true
default-features = false
[dependencies.no_std_time]
version = "0.16.0"
default-features = false
[dependencies.num-traits]
version = "0.2.19"
default-features = false
[dependencies.num_enum]
version = "0.7.6"
optional = true
default-features = false
[dependencies.postcard]
version = "1.1.3"
features = ["alloc"]
default-features = false
[dependencies.prometheus-client]
version = "0.25.0"
optional = true
[dependencies.pyo3]
version = "0.29.1"
features = ["auto-initialize"]
optional = true
[dependencies.ratatui]
version = "0.30.2"
features = ["crossterm"]
optional = true
default-features = false
[dependencies.regex]
version = "1.13.1"
optional = true
[dependencies.regex-syntax]
version = "0.8.11"
optional = true
[dependencies.send_wrapper]
version = "0.6.0"
optional = true
[dependencies.serde]
version = "1.0.229"
features = [
"alloc",
"derive",
]
default-features = false
[dependencies.serde_json]
version = "1.0.151"
features = ["alloc"]
optional = true
default-features = false
[dependencies.serial_test]
version = "4.0.1"
features = ["logging"]
optional = true
default-features = false
[dependencies.tokio]
version = "1.53.1"
features = [
"sync",
"net",
"rt",
"io-util",
"macros",
"rt-multi-thread",
"time",
]
optional = true
[dependencies.tuple_list]
version = "0.1.3"
[dependencies.tuple_list_ex]
version = "0.16.0"
default-features = false
[dependencies.typed-builder]
version = "0.23.2"
optional = true
[dependencies.uuid]
version = "1.24.0"
features = [
"serde",
"v4",
"serde",
"v4",
]
optional = true
[dependencies.wait-timeout]
version = "0.2.1"
optional = true
[dependencies.z3]
version = "0.20.2"
optional = true
default-features = false
[dev-dependencies.bytecount]
version = "0.6.9"
[dev-dependencies.serde_json]
version = "1.0.151"
features = ["alloc"]
default-features = false
[dev-dependencies.static_assertions]
version = "1.1.0"
[build-dependencies.rustversion]
version = "1.0.23"
[target."cfg(unix)".dependencies.libc]
version = "0.2.189"
[target."cfg(windows)".dependencies.winapi]
version = "0.3"
features = [
"dbghelp",
"minwindef",
"winnt",
"errhandlingapi",
"processthreadsapi",
]
[target."cfg(windows)".dependencies.windows]
version = "0.62.2"
features = [
"Win32_Foundation",
"Win32_System_Threading",
"Win32_System_Diagnostics_Debug",
"Win32_System_Kernel",
"Win32_System_Memory",
"Win32_Security",
"Win32_System_SystemInformation",
]
[target."cfg(windows)".build-dependencies.windows]
version = "0.62.2"
[lints.clippy]
alloc_instead_of_core = "deny"
cargo_common_metadata = "deny"
cast_possible_truncation = "allow"
comparison_chain = "allow"
extra_unused_lifetimes = "allow"
missing_errors_doc = "allow"
missing_panics_doc = "allow"
module_name_repetitions = "allow"
multiple_crate_versions = "allow"
negative_feature_names = "allow"
ptr_as_ptr = "allow"
similar_names = "allow"
std_instead_of_alloc = "deny"
std_instead_of_core = "deny"
struct_field_names = "allow"
too_many_lines = "allow"
type_repetition_in_bounds = "allow"
unreadable_literal = "allow"
unsafe_derive_deserialize = "allow"
used_underscore_binding = "allow"
[lints.clippy.all]
level = "deny"
priority = -1
[lints.clippy.cargo]
level = "warn"
priority = -1
[lints.clippy.pedantic]
level = "deny"
priority = -1
[lints.rust]
incomplete_features = "allow"
unexpected_cfgs = "forbid"
[lints.rust.warnings]
level = "deny"
priority = -1
[lints.rustdoc]
broken_intra_doc_links = "deny"