Quick Start
Contents
Quick Start#
This guide is intended to get you started fuzzing a C program with czz-llvm as soon as possible. For more detail on the various steps taken here, refer to the rest of the documentation.
Dependencies#
The following tools must be present on your $PATH to run czz-llvm:
z3, the Z3 SMT solverllvm-link(version <= 12), shipped with LLVM
On Ubuntu, these can be installed with
sudo apt-get install -y llvm z3
Obtaining Binaries#
You can either download pre-built binaries, or build them yourself from source.
Download Pre-Built Binaries#
The CI system uploads artifacts to GitHub. To download a pre-built binary,
navigate to the “Actions” tab
of the czz GitHub repo, select the
latest completed build of main, and click on the appropriate “bdist” (binary
distribution) artifact for your OS.
Build from Source#
To build czz you’ll need GHC and cabal, which can be installed with
ghcup.
git clone https://github.com/langston-barrett/czz.git
cd czz
git submodule update --init
cabal build exe:czz-llvm-tui
You can locate the built executable with cabal list-bin exe:czz-llvm-tui, or
install it under ~/.cabal/bin with cabal install
exe:czz-llvm-tui --overwrite-policy=always.
Run#
Build the Target#
To run czz-llvm, you’ll need to compile your program to LLVM bitcode. You can do this with gllvm or build-bom, or for single-file C programs you can run
clang -g -emit-llvm -fno-discard-value-names -c prog.c -o prog.bc
(To view the resulting LLVM module, try using llvm-dis.)
Run the TUI#
Then you can run the TUI (Terminal User Interface) like so:
czz-llvm-tui prog.bc
Press ESC to exit the TUI.
See Configuration for information on configuring czz-llvm.