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 two key actions: View and Trace.
1. Viewing Defects
After a fuzzing run, you can review defects by navigating to the defects section:
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.
Reviewing the ordered stack trace can provide insights into which functions and basic blocks contributed to the fault.
2. Viewing the Program Trace
For a deeper analysis, you can download a complete program trace by selecting the Trace option:
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.