Metalware automatically identifies and records defects during each fuzzing run. A defect is defined as either:
  • A Crash: Caused by malformed or unexpected input.
  • A Memory Violation: Detected by Havoc’s built-in memory sanitizer.
Each defect is logged and can be further examined through three key actions: View, Graph and Trace.

1. Viewing Defects

After a fuzzing run, you can review defects by navigating to the defects section:
Image without caption
Key Features:
  • Automatic Classification:
    • Havoc attempts to automatically classify each defect based on the collected trace data.
  • Chronological Stack Traces:
    • For every defect, Havoc displays a chronological series of events with corresponding stack traces that led to the crash. This detailed view helps you understand the sequence of operations that triggered the issue.
Image without caption

2. Graphing the execution

You can graph the execution of the input that led to the defect by selecting Graph . For more details see Graphing ExecutionsGraphing Executions.
Image without caption
Image without caption

3. Downloading the Program Trace

For a deeper analysis, you can download a complete program trace by selecting the Trace option:
Image without caption
A trace provides a unified, detailed view of everything that occurred during the program execution, including:
  • Instruction Flow:
    • A sequential listing of executed instructions, organized into functions and basic blocks.
  • Register Activity:
    • Information on which registers are written to at each instruction.
  • Memory Operations:
    • Detailed records of memory reads and writes associated with each instruction.
Why Use a Trace?
A complete program trace is invaluable for in-depth analysis, helping you pinpoint why a defect occurred and enabling you to trace the exact sequence of operations that led to a failure.