Class FlowInformation
java.lang.Object
com.pnfsoftware.jeb.core.units.code.FlowInformation
- All Implemented Interfaces:
IFlowInformation
Default
IFlowInformation
implementation-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final FlowInformation
Empty flow information: the instruction modifies the flow of execution, but no target is explicitly specified.static final FlowInformation
Empty flow information, and implicit fall-through is disabled: the instruction modifies the flow of execution, but no target is explicitly specified.static final int
static final int
static final FlowInformation
No flow information: the instruction does not modify the flow of execution. -
Constructor Summary
ConstructorsConstructorDescriptionCreate 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. -
Method Summary
Modifier and TypeMethodDescriptionvoid
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
Get the number of instructions in the delay slot.Get the a list of targets.static boolean
isAddressInTargets
(IFlowInformation flowinfo, long address) boolean
isBroken()
Determine if this object does contain flow information.boolean
Determine if this object does contain flow information and all targets are known.boolean
Determine if this object does contain flow information but has no known targets.boolean
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
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) toString()
-
Field Details
-
FLAG_COMPUTE_FT
public static final int FLAG_COMPUTE_FT- See Also:
-
FLAG_NO_FT
public static final int FLAG_NO_FT- See Also:
-
NONE
No flow information: the instruction does not modify the flow of execution. -
EMPTY
Empty flow information: the instruction modifies the flow of execution, but no target is explicitly specified. -
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.
-
-
Constructor Details
-
FlowInformation
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 useNONE
. -
FlowInformation
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 useNONE
.- Parameters:
computeFallThrough
-delaySlotCount
-
-
-
Method Details
-
addTarget
Add a target to the list of possible targets.- Parameters:
entryPoint
-
-
addTargets
Add a collection of targets to the list of possible targets.- Parameters:
entryPoints
-
-
isBroken
public boolean isBroken()Description copied from interface:IFlowInformation
Determine if this object does contain flow information.- Specified by:
isBroken
in interfaceIFlowInformation
- Returns:
- true is the flow is broken (eg, generic branch)
-
isBrokenUnknown
public boolean isBrokenUnknown()Description copied from interface:IFlowInformation
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.
- Specified by:
isBrokenUnknown
in interfaceIFlowInformation
- Returns:
- true if the flow is broken but no targets are known
-
isBrokenKnown
public boolean isBrokenKnown()Description copied from interface:IFlowInformation
Determine if this object does contain flow information and all targets are known.- Specified by:
isBrokenKnown
in interfaceIFlowInformation
- Returns:
- true if the flow is broken and all targets are known
-
getTargets
Description copied from interface:IFlowInformation
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 byIInstruction.getRoutineCall(long)
) or when its calculation was requested dynamically (viaIFlowInformation.mustComputeFallThrough()
).- Specified by:
getTargets
in interfaceIFlowInformation
- Returns:
- the list of addresses that must be checked, possibly empty. A null value signifies no-flow information.
-
setComputeFallThrough
public void setComputeFallThrough(boolean enabled) -
mustComputeFallThrough
public boolean mustComputeFallThrough()Description copied from interface:IFlowInformation
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.
- Specified by:
mustComputeFallThrough
in interfaceIFlowInformation
- Returns:
- true if the flowinfo object does not include a fall-through address, false otherwise
-
setNoFallThrough
public void setNoFallThrough(boolean enabled) -
noFallThrough
public boolean noFallThrough()Description copied from interface:IFlowInformation
Indicate whether this flow information forbids the implicit calculation of a fall-through edge. (A fall-through may be explicitly specified as atarget
, regardless.)- Specified by:
noFallThrough
in interfaceIFlowInformation
- Returns:
- true if the flowinfo specifies no fall-through
-
setDelaySlotCount
public void setDelaySlotCount(int delaySlotCount) -
getDelaySlotCount
public int getDelaySlotCount()Description copied from interface:IFlowInformation
Get the number of instructions in the delay slot.- Specified by:
getDelaySlotCount
in interfaceIFlowInformation
- Returns:
- number of instructions in delay slot
-
toString
-
isAddressInTargets
-