EXE: Automatically Generating Inputs of Death

Cristian Cadar, Vijay Ganesh, Peter M. Pawlowski, David L. Dill, Dawson R. Engler

  • Read: 21 Apr 2025
  • Published: 30 Oct 2006

CCS ‘06: Proceedings of the 13th ACM conference on Computer and communications security, Pages 322 - 335

https://doi.org/10.1145/1180405.118044


See also: KLEE.

Q&A (link)

What are the motivations for this work?

  • See Abstract, Introduction.
  • People want an effective bug-finding tool that automatically generates inputs that crash real code.
  • Currently, code testing is done by code review, manual and random testing, dynamic tools, and static analysis.
  • Static analysis provide full path coverage, but it reasons poorly about bugs that depend on accurate value info, pointer, and heap layour, among many others.

What is the proposed solution?

  • See Introduction, Section 3.
  • A Symbolic execution tool named EXE. It runs code on symbolic input, forks execution when branching.
  • A constraint solver STP used by EXE. STP accurately models memory for C program, but it doesn’t handle floating point).
  • Uses STP to generate a test case whenever a path terminates (normally or due to a bug, the so called “death”).

What is the work’s evaluation of the proposed solution?

  • See Section 3, Section 4.
  • Code coverage: For basic block coverage test with executable Berkley Packet Filter, EXE reaches over 90% coverage rate quickly (7956 test cases). Significantly more efficient in code coverage compared with random testing.
  • Bug finding: Some real-world applications are tested, with bugs found. But not mentioning code coverage for each of them.

What is your analysis of the identified problem, idea and evaluation?

The constraint solver STP proposed in the paper sounds like an innovation. The time measurement and code coverage rates of real-world tests were not mentioned in the paper, it might be a good idea to test them out by myself.

What are the contributions?

  • See Introduction, Section 3, Section 4.
  • Symbolic execution tool EXE.
  • Memory accurate constraint solver STP.

What are future directions for this research?

  • See Section 6.
  • The authors compared some other related work with EXE, including DART, CUTE, CBMC.

What questions are you left with?

NONE

What is your take-away message from this paper?

NONE

GPT-generated Keynotes

When the program encounters a conditional statement involving a symbolic expression, EXE forks the execution path, exploring both the true and false branches with the corresponding constraints. If a potential error is detected along a path—such as a buffer overflow or invalid pointer dereference—EXE uses its constraint solver, STP, to find concrete input values that satisfy the path’s constraints, effectively generating a test case that will trigger the bug when the program is run normally.

Innovations in EXE’s design:

  1. Precise Symbolic Pointer Modeling: EXE accurately models operations involving symbolic pointers, including pointer arithmetic and memory accesses through symbolic addresses. This capability allows it to analyze complex memory operations that are common in systems programming.
  2. Bit-Level Precision: The system operates with bit-level precision, enabling it to detect subtle bugs related to low-level data representations, such as integer overflows and misaligned memory accesses.
  3. Constraint Caching: To improve performance, EXE caches the results of constraint-solving queries. This caching mechanism prevents redundant computations when the same constraints are encountered multiple times during execution.
  4. Constraint Independence Optimization: EXE identifies and separates independent subsets of constraints, allowing it to solve smaller, more manageable constraint sets. This optimization reduces the computational overhead associated with constraint solving.
  5. Integration with STP Solver: EXE is co-designed with the STP constraint solver, which is optimized for the types of constraints generated during symbolic execution. This tight integration enhances the efficiency and effectiveness of the test case generation process.
Written on