Skip to content

Modeling Implicit Instruction Dependencies in IR #75

Description

@Chand-ra

Background

In our current IR, instruction dependencies are primarily defined by explicit data flow: an instruction is dependent on another if it consumes the dependee's output as an input. Mutators must respect these dependencies, and the following mutators do so in different ways:

  • InputSwapMutator: Sidesteps dependencies by only swapping inputs of matching types.
  • InstructionDeleteMutator: Sidesteps dependencies by identifying type-matching variables to replace references to a deleted instruction.
  • InstructionReorderMutator: Respects dependencies by ensuring instructions are not reordered if one consumes the other’s output.

The Problem

The IR does not currently capture implicit dependencies: semantic requirements where one operation must precede another despite having no direct data-flow link.

For example, A Recv* operation must always be preceded by a SendMessage operation. If a mutator (like reordering or deletion) breaks this implicit sequence, the program results in a 5-second timeout during execution. This significantly reduces fuzzing bandwidth and efficiency, and may lead to false positive hangs.

Proposed Goal

To achieve good fuzzing performance, we need a mechanism to represent these implicit dependencies within the IR. This will allow mutators to become more "structurally aware," ensuring they respect semantic ordering requirements and maintain greater program validity during mutation.

See Matt's comments on PR #60 and PR #61 for more context.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions