Kwansik,
Each fuzz primitive (or “block”) has its own rules for generating fuzz data, and custom blocks can also be defined. Most of the built in primitives are deterministic. The string primitive has a list of bad strings and IIRC also mutates the default value. The numeric primitives have their own strategy that emphasizes edge values.
If you want to dive in more, I highly recommend checking out the code itself. You should be able to find the relevant code fairly easily.
Hope that helps.
Joshua