[package] name = "libafl" version.workspace = true authors = ["Andrea Fioraldi ", "Dominik Maier "] description = "Slot your own fuzzers together and extend their features using Rust" documentation = "https://docs.rs/libafl" repository = "https://github.com/AFLplusplus/LibAFL/" readme = "../README.md" license = "MIT OR Apache-2.0" keywords = ["fuzzing", "testing", "security"] edition = "2021" categories = ["development-tools::testing", "emulators", "embedded", "os", "no-std"] [features] default = ["std", "derive", "llmp_compression", "rand_trait", "fork", "prelude"] std = ["serde_json", "serde_json/std", "hostname", "nix", "serde/std", "bincode", "wait-timeout", "regex", "byteorder", "once_cell", "uuid", "tui_monitor", "ctor", "backtrace", "uds"] # print, env, launcher ... support derive = ["libafl_derive"] # provide derive(SerdeAny) macro. fork = [] # uses the fork() syscall to spawn children, instead of launching a new command, if supported by the OS (has no effect on Windows, no_std). rand_trait = ["rand_core"] # If set, libafl's rand implementations will implement `rand::Rng` introspection = [] # Include performance statistics of the fuzzing pipeline concolic_mutation = ["z3"] # include a simple concolic mutator based on z3 python = ["pyo3", "concat-idents"] prelude = [] # Expose libafl::prelude for access without additional using directives tui_monitor = ["tui", "crossterm"] # enable TuiMonitor with crossterm prometheus_monitor = ["std", "async-std", "prometheus-client", "tide", "futures"] cli = ["clap"] # expose bolts::cli qemu_cli = ["cli"] frida_cli = ["cli"] afl_exec_sec = [] # calculate exec/sec like AFL errors_backtrace = ["backtrace"] cmin = ["z3"] # corpus minimisation # features hiding dependencies licensed under GPL gpl = [] # features hiding dependencies licensed under AGPL agpl = ["gpl", "nautilus"] nautilus = ["grammartec", "std", "serde_json/std"] # LLMP features llmp_bind_public = [] # If set, llmp will bind to 0.0.0.0, allowing cross-device communication. Binds to localhost by default. llmp_compression = ["miniz_oxide"] # llmp compression using GZip llmp_debug = [] # Enables debug output for LLMP llmp_small_maps = [] # reduces initial map size for llmp [build-dependencies] rustversion = "1.0" [dev-dependencies] serde_json = { version = "1.0", default-features = false, features = ["alloc"] } serial_test = "0.9" [dependencies] libafl_derive = { version = "0.8.2", optional = true, path = "../libafl_derive" } rustversion = "1.0" tuple_list = { version = "0.1.3" } hashbrown = { version = "0.12", features = ["serde", "ahash-compile-time-rng"], default-features=false } # A faster hashmap, nostd compatible num-traits = { version = "0.2", default-features = false } xxhash-rust = { version = "0.8.5", features = ["xxh3"] } # xxh3 hashing for rust serde = { version = "1.0", default-features = false, features = ["alloc", "derive"] } # serialization lib erased-serde = { version = "0.3.21", default-features = false, features = ["alloc"] } # erased serde postcard = { version = "1.0", features = ["alloc"] } # no_std compatible serde serialization fromat bincode = {version = "1.3", optional = true } static_assertions = "1.1.0" c2rust-bitfields = { version = "0.3", features = ["no_std"] } num_enum = { version = "0.5.7", default-features = false } typed-builder = "0.10.0" # Implement the builder pattern at compiletime ahash = { version = "0.7", default-features=false } # The hash function already used in hashbrown intervaltree = { version = "0.2.7", default-features = false, features = ["serde"] } backtrace = {version = "0.3", optional = true} # Used to get the stacktrace in StacktraceObserver ctor = { optional = true, version = "0.1" } serde_json = { version = "1.0", optional = true, default-features = false, features = ["alloc"] } miniz_oxide = { version = "0.6.2", optional = true} hostname = { version = "^0.3", optional = true } # Is there really no gethostname in the stdlib? rand_core = { version = "0.6", optional = true } nix = { version = "0.25", optional = true } regex = { version = "1", optional = true } uuid = { version = "1.1.2", optional = true, features = ["serde", "v4"] } byteorder = { version = "1.4", optional = true } once_cell = { version = "1.13", optional = true } libm = "0.2.2" tui = { version = "0.19", default-features = false, features = ['crossterm'], optional = true } crossterm = { version = "0.25", optional = true } clap = {version = "4.0", features = ["derive", "wrap_help"], optional = true} prometheus-client = { version= "0.18.0", optional = true} tide = { version = "0.16.0", optional = true } async-std = { version = "1.8.0", features = ["attributes"], optional = true } futures = { version = "0.3.24", optional = true } wait-timeout = { version = "0.2", optional = true } # used by CommandExecutor to wait for child process z3 = { version = "0.11", features = ["static-link-z3"], optional = true } # for concolic mutation pyo3 = { version = "0.17", optional = true, features = ["serde", "macros"] } concat-idents = { version = "1.1.3", optional = true } # AGPL # !!! this create requires nightly grammartec = { version = "0.2", optional = true } [target.'cfg(unix)'.dependencies] libc = "0.2" # For (*nix) libc uds = { version = "0.2.6", optional = true } lock_api = "0.4.7" [target.'cfg(windows)'.dependencies] windows = { version = "0.42.0", 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 = "0.42.0" #[profile.release] #lto = true #opt-level = 3 #debug = true [[example]] name = "llmp_test" path = "./examples/llmp_test/main.rs" required-features = ["std"]