Cargo Features

[dependencies]
lancelot = { version = "0.8.6", default-features = false, features = ["test", "flirt", "emulator", "disassembler"] }
default = disassembler, emulator, flirt

These default features are set whenever lancelot is added without default-features = false somewhere in the dependency tree.

test = chrono, emulator, fern

The reason we do this is because doctests don't get cfg(test) See: https://github.com/rust-lang/cargo/issues/4669

flirt default = disassembler, lancelot-flirt

Affects analysis::flirt

emulator default test? = bitvec, zydis

Affects lancelot::emu

disassembler default flirt = zydis

Affects analysis::cfg, analysis::dis, pe::call_targets, pe::noret_imports, pe::find_thunks, pe::find_functions, pe::find_function_starts, test::read_insn

Features from optional dependencies

In crates that don't use the dep: syntax, optional dependencies automatically become Cargo features. These features may have been created by mistake, and this functionality may be removed in the future.

zydis disassembler emulator

Enables zydis ^3

use patched zydis-rs locally for wasm support, and upstream v3.0 when publishing to crates.io

fern test?

Enables fern ^0.6

chrono, and fern are only needed by tests, but because of the need for a feature named test, they also have to be optional dependencies as well.

chrono test?
bitvec emulator

Enables bitvec

needed for emu

lancelot-flirt flirt

Enables lancelot-flirt ^0.8.6

needed for flirt