public class

FlowInformation

extends Object
implements IFlowInformation
java.lang.Object
   ↳ com.pnfsoftware.jeb.core.units.code.FlowInformation

Class Overview

Default IFlowInformation implementation

Summary

Constants
int FLAG_COMPUTE_FT
int FLAG_NO_FT
Fields
public static final FlowInformation EMPTY Empty flow information: the instruction modifies the flow of execution, but no target is explicitly specified.
public static final FlowInformation EMPTY_NO_FT Empty flow information, and implicit fall-through is disabled: the instruction modifies the flow of execution, but no target is explicitly specified.
public static final FlowInformation NONE No flow information: the instruction does not modify the flow of execution.
Public Constructors
FlowInformation()
Create an object with an empty target list, no post-compute fall-through, and no delay-slot (default).
FlowInformation(boolean computeFallThrough, int delaySlotCount)
Create an object with an empty target list.
Public Methods
void addTarget(ICodePointer entryPoint)
Add a target to the list of possible targets.
void addTargets(Collection<? extends ICodePointer> entryPoints)
Add a collection of targets to the list of possible targets.
int getDelaySlotCount()
Get the number of instructions in the delay slot.
List<ICodePointer> getTargets()
Get the a list of targets.
static boolean isAddressInTargets(IFlowInformation flowinfo, long address)
boolean isBroken()
Determine if this object does contain flow information.
boolean isBrokenKnown()
Determine if this object does contain flow information and all targets are known.
boolean isBrokenUnknown()
Determine if this object does contain flow information but has no known targets.
boolean mustComputeFallThrough()
Indicate if the flow information includes a fall-through address (relative to the current instruction) that is not present in the FlowInfo object itself.
boolean noFallThrough()
Indicate whether this flow information forbids the implicit calculation of a fall-through edge.
void setComputeFallThrough(boolean enabled)
void setDelaySlotCount(int delaySlotCount)
void setNoFallThrough(boolean enabled)
String toString()
[Expand]
Inherited Methods
From class java.lang.Object
From interface com.pnfsoftware.jeb.core.units.code.IFlowInformation

Constants

public static final int FLAG_COMPUTE_FT

Constant Value: 1 (0x00000001)

public static final int FLAG_NO_FT

Constant Value: 2 (0x00000002)

Fields

public static final FlowInformation EMPTY

Empty flow information: the instruction modifies the flow of execution, but no target is explicitly specified.

public static final FlowInformation EMPTY_NO_FT

Empty flow information, and implicit fall-through is disabled: the instruction modifies the flow of execution, but no target is explicitly specified. This constant is suitable for bad or tentative call-to-subs for which the return-to-caller is uncertain.

public static final FlowInformation NONE

No flow information: the instruction does not modify the flow of execution.

Public Constructors

public FlowInformation ()

Create an object with an empty target list, no post-compute fall-through, and no delay-slot (default). Note: this object indicates that the flow is changing, regardless of whether of not the target list will be populated. To indicate no-change in flow, a user should use NONE.

public FlowInformation (boolean computeFallThrough, int delaySlotCount)

Create an object with an empty target list. Note: this object indicates that the flow is changing, regardless of whether of not the target list will be populated. To indicate no-change in flow, a user should use NONE.

Public Methods

public void addTarget (ICodePointer entryPoint)

Add a target to the list of possible targets.

public void addTargets (Collection<? extends ICodePointer> entryPoints)

Add a collection of targets to the list of possible targets.

public int getDelaySlotCount ()

Get the number of instructions in the delay slot.

Returns
  • number of instructions in delay slot

public List<ICodePointer> getTargets ()

Get the a list of targets. Be careful, this list does not include the fall-through target if it is implied (eg, when flow-info is returned by getRoutineCall(long)) or when its calculation was requested dynamically (via mustComputeFallThrough()).

Returns
  • the list of addresses that must be checked, possibly empty. A null value signifies no-flow information.

public static boolean isAddressInTargets (IFlowInformation flowinfo, long address)

public boolean isBroken ()

Determine if this object does contain flow information.

Returns
  • true is the flow is broken (eg, generic branch)

public boolean isBrokenKnown ()

Determine if this object does contain flow information and all targets are known.

Returns
  • true if the flow is broken and all targets are known

public boolean isBrokenUnknown ()

Determine if this object does contain flow information but has no known targets.

IMPORTANT: if this flow info object is mixed (it specifies having unknown target(s), and also bears known targets), this method returns false.

Returns
  • true if the flow is broken but no targets are known

public boolean mustComputeFallThrough ()

Indicate if the flow information includes a fall-through address (relative to the current instruction) that is not present in the FlowInfo object itself. If this method returns true, the caller must dynamically calculate the fall-through address itself.

Note that the creator of a flowinfo object may decide to add the fall-through (if any) in the flowinfo object target list. However, in some cases, such as branching instructions with delay slot(s), it is simpler to indicate that the branching instruction allows a fall-through flow, but that it should be computed by the client/user, instead of stored or computed by the flowinfo object.

Returns
  • true if the flowinfo object does not include a fall-through address, false otherwise

public boolean noFallThrough ()

Indicate whether this flow information forbids the implicit calculation of a fall-through edge. (A fall-through may be explicitly specified as a target, regardless.)

Returns
  • true if the flowinfo specifies no fall-through

public void setComputeFallThrough (boolean enabled)

public void setDelaySlotCount (int delaySlotCount)

public void setNoFallThrough (boolean enabled)

public String toString ()