cargo build
When we run cargo build
, we have seen that cargo
will:
- Run our build script
- Build (compile) our crate
When we build an executable like our fuzzer with cargo build
, cargo
will put the
resulting binary in target/debug/<EXECUTABLE_NAME>
. Let's go ahead and build our
fuzzer:
$ cargo build
$ ls target/debug/
build deps examples first-fuzzer first-fuzzer.d incremental
We can run our first-fuzzer
binary:
$ ./target/debug/first-fuzzer -h
Usage: first-fuzzer --corpus <CORPUS> --solutions <SOLUTIONS>
Options:
-c, --corpus <CORPUS> Corpus directory
-s, --solutions <SOLUTIONS> Solutions directory
-h, --help Print help
If we build in the release
profile with cargo build --release
, instead of being
located in the debug
subdirectory, our binary will be in the release
subdirectory.
Generally, you'll use either the debug
(default) profile or the release
profile, and
you should always use the release
profile when running real fuzzing campaigns.
Otherwise, you are leaving performance on the table!
We can build and run just the same with the release
profile:
$ cargo build --release
$ ./target/release/first-fuzzer -h
Finished release [optimized] target(s) in 1.33s
Running `target/release/first-fuzzer -h`
Usage: first-fuzzer --corpus <CORPUS> --solutions <SOLUTIONS>
Options:
-c, --corpus <CORPUS> Corpus directory
-s, --solutions <SOLUTIONS> Solutions directory
-h, --help Print help