com.pnfsoftware.jeb.core.units.code.IDFA3<InsnType extends com.pnfsoftware.jeb.core.units.code.IInstruction, Block extends com.pnfsoftware.jeb.core.units.code.IBasicBlock<InsnType>> |
![]() |
Specification of a data flow analysis objects for control flow graphs.
Constants | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
int | STANDARD_COLLECTION_FLAGS | Standard setting for variable collection flags: conservative. | |||||||||
boolean | STANDARD_INTEGRATE_INPUTS | Standard setting for routine inputs integration into output maps and reaching-register chains: enabled. |
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
abstract boolean | checkNoUse(long addr, int varid) | ||||||||||
abstract boolean | checkSingleDef(long addr, int varid, long expectedDefAddress) | ||||||||||
abstract Long |
checkSingleDef(long addr, int varid)
Check whether a used variable has a single definition point.
| ||||||||||
abstract Long |
checkSingleDefNoInput(long addr, int varid)
Check whether a used variable has a single explicit definition point.
| ||||||||||
abstract Long | checkSingleSource(long addr, int varid) | ||||||||||
abstract boolean | checkSingleSource(long addr, int varid, long expectedSourceAddress) | ||||||||||
abstract Long | checkSingleUse(long addr, int varid) | ||||||||||
abstract boolean | checkSingleUse(long addr, int varid, long expectedUseAddress) | ||||||||||
abstract void | collectInstructionAllDefs(long addr, Collection<Integer> r) | ||||||||||
abstract void | collectInstructionAllUses(long addr, Collection<Integer> r) | ||||||||||
abstract Collection<Long> | getBlockDefUses(long addr, int varid) | ||||||||||
abstract IControlFlowGraph<InsnType, Block> |
getCfg()
Retrieve a reference to the CFG object that will be accessed and modified when performing an
analysis.
| ||||||||||
abstract Map<Integer, Collection<Long>> | getDefUseChains(long addr) | ||||||||||
abstract Collection<Long> | getDefUses(long addr, int varid, int stopCount) | ||||||||||
abstract Collection<Long> | getDefUses(long addr, int varid) | ||||||||||
abstract Collection<Long> | getInputMap(int varid) | ||||||||||
abstract Map<Integer, Collection<Long>> | getInputMap() | ||||||||||
abstract Collection<Integer> | getInputs() | ||||||||||
abstract Collection<Integer> | getInstructionAllDefs(long addr) | ||||||||||
abstract Collection<Integer> | getInstructionAllUses(long addr) | ||||||||||
abstract Collection<Integer> | getInstructionDefs(long addr) | ||||||||||
abstract Collection<Integer> | getInstructionPotentialDefs(long addr) | ||||||||||
abstract Collection<Integer> | getInstructionPotentialUses(long addr) | ||||||||||
abstract Collection<Integer> | getInstructionSpoiledDefs(long addr) | ||||||||||
abstract Collection<Integer> | getInstructionUses(long addr) | ||||||||||
abstract Collection<Long> | getLiveChains(Block b, int idx, int varid) | ||||||||||
abstract Map<Integer, Collection<Long>> | getLiveChains(Block b, int idx) | ||||||||||
abstract int |
getMaxBlocks()
Retrieve the maximum block count used for common DFA operations.
| ||||||||||
abstract Map<Integer, Collection<Long>> | getOutputMap() | ||||||||||
abstract Collection<Long> | getOutputMap(Block blk, int varid) | ||||||||||
abstract Map<Integer, Collection<Long>> | getOutputMap(Block blk) | ||||||||||
abstract Collection<Long> | getOutputMap(int varid) | ||||||||||
abstract Collection<Integer> | getOutputs(Block blk) | ||||||||||
abstract Collection<Integer> | getOutputs() | ||||||||||
abstract Collection<Long> | getReachChains(Block b, int idx, int varid) | ||||||||||
abstract Map<Integer, Collection<Long>> | getReachChains(Block b, int idx) | ||||||||||
abstract Map<Integer, Collection<Long>> | getUseDefChains(long addr) | ||||||||||
abstract Collection<Long> | getUseDefs(long addr, int varid, int stopCount) | ||||||||||
abstract Collection<Long> | getUseDefs(long addr, int varid) | ||||||||||
abstract Collection<Integer> |
getUseDiscrepancies(long addr)
Retrieve the list of use-discrepancies at the provided instruction address.
| ||||||||||
abstract int |
getVariableCollectionFlags()
Retrieve the variable collection flags.
| ||||||||||
abstract ICFGOwnerContext | getVariableInformationProvider() | ||||||||||
abstract void |
invalidate()
Invalidate the analysis.
| ||||||||||
abstract boolean |
isConservative()
Convenience method used to determine whether the variable collection flags are
CONSERVATIVE . | ||||||||||
abstract boolean | isIntegrateCalculatedInputRegisters() | ||||||||||
abstract boolean |
isNotRedefined(int varid, long addr0, long addr1)
Determine if a variable reaching a start instruction has not been redefined when it reaches a
final instruction.
| ||||||||||
abstract boolean |
isNotRedefined(int varid, Block b0, int i0, Block b1, int i1)
Determine if a variable reaching a start instruction has not been redefined when it reaches a
final instruction.
| ||||||||||
abstract boolean |
isTerminator(Block blk)
Determine whether the provided block is a terminator.
| ||||||||||
abstract boolean | isUseDiscrepancy(long addr, int varid) | ||||||||||
abstract boolean |
isValid()
Determine whether the current analysis was performed and is valid.
| ||||||||||
abstract Boolean |
isVarReachingFromTo(int varid, long addr0, long addr1)
Determine if a variable used by the start instruction reaches the final instruction with the
same value.
| ||||||||||
abstract Boolean |
isVarReachingFromTo(int varid, Block b0, int i0, Block b1, int i1)
Determine if a variable used by the start instruction reaches the final instruction with the
same value.
| ||||||||||
abstract void | notifyInstructionUpdate(long addr) | ||||||||||
abstract void |
perform()
Perform data flow analysis on the CFG.
| ||||||||||
abstract void |
setConservative()
Convenience method used to set or remove
CONSERVATIVE variable collection
flags. | ||||||||||
abstract void | setIntegrateCalculatedInputRegisters(boolean integrateCalculatedInputRegisters) | ||||||||||
abstract int |
setMaxBlocks(int maxBlocks)
Set an exploration threshold for most DFA operations.
| ||||||||||
abstract void |
setVariableCollectionFlags(int varCollectionFlags)
Set the variable collection flags.
| ||||||||||
abstract void | setVariableInformationProvider(ICFGOwnerContext varInfoProvider) |
Standard setting for variable collection flags: conservative.
Standard setting for routine inputs integration into output maps and reaching-register chains: enabled.
Check whether a used variable has a single definition point. The def point may be explicit (e.g. resulting from an assignment) or implicit (e.g. provided as a parameter to the routine, which is always represented as the address -1).
addr | initial instruction address |
---|---|
varid | used variable at the initial instruction |
Check whether a used variable has a single explicit definition point. The def point cannot be a routine input (i.e. the definition must be explicit).
addr | initial instruction address |
---|---|
varid | used variable at the initial instruction |
Retrieve a reference to the CFG object that will be accessed and modified when performing an analysis.
addr | instruction address |
---|---|
varid | a variable, which must be defined by the provided instruction |
addr | instruction address |
---|---|
varid | a variable, which must be defined by the provided instruction |
Retrieve the maximum block count used for common DFA operations. See
setMaxBlocks(int)
for details.
addr | instruction address |
---|---|
varid | a variable, which must be used by the provided instruction |
addr | instruction address |
---|---|
varid | a variable, which must be used by the provided instruction |
Retrieve the list of use-discrepancies at the provided instruction address.
addr | instruction address |
---|
Retrieve the variable collection flags.
DefUseInfo
Invalidate the analysis. Clients have the responsibility to invalidate an analysis if the CFG was modified in such a way that data flow should be recalculated.
Convenience method used to determine whether the variable collection flags are
CONSERVATIVE
.
Determine if a variable reaching a start instruction has not been redefined when it reaches a final instruction. (Note that this method does not verify that varid actually has definitions reaching the start or final instruction; it is up to the caller to verify that.)
varid | variable id |
---|---|
addr0 | start address, exclusive |
addr1 | final address, also exclusive |
Determine if a variable reaching a start instruction has not been redefined when it reaches a final instruction. (Note that this method does not verify that varid actually has definitions reaching the start or final instruction; it is up to the caller to verify that.)
varid | variable id |
---|---|
b0 | start block |
i0 | final block |
b1 | index of the start instruction in the start block, exclusive |
i1 | index of the final instruction in the final block, also exclusive |
Determine whether the provided block is a terminator. A terminator has no output and its final instruction is a clean routine terminator.
blk | block to test |
---|
Determine whether the current analysis was performed and is valid.
Determine if a variable used by the start instruction reaches the final instruction with the same value.
varid | variable id |
---|---|
addr0 | start address, exclusive |
addr1 | final address, also exclusive |
Determine if a variable used by the start instruction reaches the final instruction with the same value.
varid | variable id |
---|---|
b0 | start block |
i0 | final block |
b1 | index of the start instruction in the start block, exclusive |
i1 | index of the final instruction in the final block, also exclusive |
Perform data flow analysis on the CFG. Upon return, basic blocks will have their data chains (ud and du, full and simple) set up and accessible.
Convenience method used to set or remove CONSERVATIVE
variable collection
flags.
Set an exploration threshold for most DFA operations. By default, there is no threshold. The threshold is a block count; if a block count is reached, a chain may contain a reference to the invalid address -2 in order to indicate an incomplete result.
maxBlocks | -1 means no limit |
---|
Set the variable collection flags.
varCollectionFlags | flags, see DefUseInfo
|
---|