Class AbstractEExpressionOptimizer
java.lang.Object
com.pnfsoftware.jeb.core.AbstractPlugin
com.pnfsoftware.jeb.core.units.code.asm.decompiler.opt.AbstractOptimizer<IERoutineContext>
com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.opt.AbstractEOptimizer
com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.opt.AbstractEExpressionOptimizer
- All Implemented Interfaces:
IPlugin
,IEOptimizer
,IOptimizer<IERoutineContext>
Skeleton for a top-down, recursive,
IEGeneric
optimizer. Expressions are provided in
depth-first, pre-order way: parent expressions are provided before their constituting children.
By default, IEStatement
s are not candidates for optimization (although they can be).
Generally, IEStatement
s should be optimized via the use an
AbstractEStatementOptimizer
.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class
Optimized Expression -
Field Summary
FieldsModifier and TypeFieldDescriptionprotected IEStatement
This field holds a reference to the top-level parent statement of the expression currently being optimized.protected boolean
Do not process left-side ofstatement
.protected boolean
Optimize only the constituents of the IRE statements, not the statements themselves.
Default value: true.Fields inherited from class com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.opt.AbstractEOptimizer
cfg, ectx
Fields inherited from class com.pnfsoftware.jeb.core.units.code.asm.decompiler.opt.AbstractOptimizer
logger
Fields inherited from interface com.pnfsoftware.jeb.core.units.code.asm.decompiler.opt.IOptimizer
DEAD_CODE_REMOVER, DEOBFUSCATOR, PRIORITY_HIGH, PRIORITY_LOW, PRIORITY_STANDARD
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected IEGeneric
doSubstitution
(IEGeneric e, SubstitutionDefinition... substitutions) Attempt to apply the first matchingSubstitutionDefinition
on anIEGeneric
expression.protected abstract AbstractEExpressionOptimizer.EOR
Attempt to optimize expressions.protected int
perform()
Perform the optimization pass.performOnExpression
(IEGeneric exp, IERoutineContext ectx) The default implementation does nothing and returns null.Methods inherited from class com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.opt.AbstractEOptimizer
cleanCfg, deleteUnreachableTrampoline, dumpCfg, getDataChainsUpdatePolicy, getMasterOptimizer, getMasterOptimizerSafe, performOnTarget, postPerform, postPerform, setDataChainsUpdatePolicy, verifyCfg
Methods inherited from class com.pnfsoftware.jeb.core.units.code.asm.decompiler.opt.AbstractOptimizer
addTag, getName, getPluginInformation, getPreferredExecutionStage, getPriority, getRequiredModeThreshold, getTags, getType, removeTag, setMasterOptimizer, setName, setPreferredExecutionStage, setPriority, setRequiredModeThreshold, setType
Methods inherited from class com.pnfsoftware.jeb.core.AbstractPlugin
dispose, getData, setData
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface com.pnfsoftware.jeb.core.units.code.asm.decompiler.opt.IOptimizer
getPreferredExecutionStage, getPriority, getRequiredModeThreshold, getTags, getType, setMasterOptimizer
Methods inherited from interface com.pnfsoftware.jeb.core.IPlugin
dispose, getData, getPluginInformation, setData
-
Field Details
-
skipStatementProcessing
protected boolean skipStatementProcessingOptimize only the constituents of the IRE statements, not the statements themselves.
Default value: true. -
skipLeftSideOfAssignment
protected boolean skipLeftSideOfAssignment -
currentStatement
This field holds a reference to the top-level parent statement of the expression currently being optimized.
-
-
Constructor Details
-
AbstractEExpressionOptimizer
- Parameters:
dataChainsUpdatePolicy
- expression optimizers should have a policy ofDataChainsUpdatePolicy.UPDATE_IF_OPTIMIZED
orDataChainsUpdatePolicy.UPDATE_IF_REQUIRED
-
-
Method Details
-
perform
protected int perform()Description copied from class:AbstractEOptimizer
Perform the optimization pass. The caller may request that data chains not be updated, whenever possible. (They may be updated internally by the optimizer, which has the final say as to how and when DFA calculations should be run.)The above means that data chains after running this method may or may not have been modified, and may or may not be in a consistent state with the optimized CFG.
- Specified by:
perform
in classAbstractEOptimizer
- Returns:
- the result of a call to one of
postPerform(...)
or a negative number indicating an error has occurred and the optimizing process should be aborted
-
performOnExpression
Description copied from class:AbstractEOptimizer
The default implementation does nothing and returns null.- Specified by:
performOnExpression
in interfaceIEOptimizer
- Overrides:
performOnExpression
in classAbstractEOptimizer
- Parameters:
exp
- IR expression to optimizeectx
- helper routine context- Returns:
- non-null if the expression was optimized; null otherwise
-
optimizeExpression
Attempt to optimize expressions. Sub-expressions may be examined. The implementor should not attempt to modify parent or cousins expressions.- Parameters:
e
- IRE- Returns:
- the new (optimized) expression as well as DFA update hints, or null if the expression could not be optimized
-
doSubstitution
Attempt to apply the first matchingSubstitutionDefinition
on anIEGeneric
expression.- Parameters:
e
- the target expression to be matched and modifiedsubstitutions
- a list of candidate substitutions- Returns:
- null if no substitution was performed, else the new expression
-