FRET-LibAFL/fuzzers/libfuzzer_stb_image
Dongjia "toka" Zhang ec38858b2d
Fix Makefile.toml (#893)
* don't use submodules

* fix

* add

* fix

* a

* fix

* doesn't work 😩

* fix

* Update build_and_test.yml

* Update build_and_test.yml

* Update build_and_test.yml
2022-11-17 04:44:26 +09:00
..
2022-08-12 02:28:32 +02:00
2021-05-20 14:05:20 +02:00
2022-11-17 04:44:26 +09:00
2021-03-29 16:13:46 +02:00

Libfuzzer for stb_image

This folder contains an example fuzzer for stb_image, using LLMP for fast multi-process fuzzing and crash detection. It has been tested on Linux and Windows.

Build

To build this example, run cargo build --release. This will build the the fuzzer (src/main.rs) with the libfuzzer compatibility layer and the SanitizerCoverage runtime functions for coverage feedback as a standalone binary.

Unlike the libpng example, in this example the harness (that entirely includes the program under test) is compiled in the build.rs file while building the crate, and linked with the fuzzer by cargo when producing the final binary, target/release/libfuzzer_stb_image.

Run

The first time you run the binary (target/release/libfuzzer_stb_image), the broker will open a tcp port (currently on port 1337), waiting for fuzzer clients to connect. This port is local and only used for the initial handshake. All further communication happens via shared map, to be independent of the kernel.

Each following execution will run a fuzzer client. As this example uses in-process fuzzing, we added a Restarting Event Manager (setup_restarting_mgr). This means each client will start itself again to listen for crashes and timeouts. By restarting the actual fuzzer, it can recover from these exit conditions.

In any real-world scenario, you should use taskset to pin each client to an empty CPU core, the lib does not pick an empty core automatically (yet).