libfuzzer
Coverage-guided fuzzer built into LLVM for C/C++ projects. Use for fuzzing C/C++ code that can be compiled with Clang.
Installation
Pick a client and clone the repository into its skills directory.
Installation
About this skill
Coverage-guided fuzzer built into LLVM for C/C++ projects. Use for fuzzing C/C++ code that can be compiled with Clang.
How to use
Zainstaluj LLVM i Clang na swoim systemie (na Ubuntu/Debian: apt install clang llvm). libFuzzer jest wbudowany w LLVM, więc nie musisz instalować go osobno.
Napisz harnes fuzzingu – funkcję LLVMFuzzerTestOneInput, która przyjmuje dane z fuzzera i przekazuje je do testowanej funkcji. Harnes powinien zawierać nagłówki stdint.h i stddef.h, a funkcja musi mieć sygnaturę: extern "C" int LLVMFuzzerTestOneInput(const uint8_t *data, size_t size).
Skompiluj harnes razem z kodem docelowym, używając flag -fsanitize=fuzzer,address -g -O2. Przykład: clang++ -fsanitize=fuzzer,address -g -O2 harness.cc target.cc -o fuzz. Flagi włączają fuzzer, detektor błędów adresów i informacje debugowania.
Utwórz katalog corpus/ na dane wejściowe fuzzera (może być pusty na początek).
Uruchom fuzzer poleceniem ./fuzz corpus/. libFuzzer będzie generować losowe dane, testować Twój kod i zapisywać interesujące przypadki testowe w katalogu corpus/.
Monitoruj wynik – fuzzer wypisze znalezione błędy, zawieszenia lub naruszenia pamięci. Jeśli potrzebujesz bardziej zaawansowanych funkcji, takich jak fuzzing wielordzeniowy, możesz później przejść na AFL++, ponieważ harnesze są kompatybilne.