public abstract class

AbstractMasterOptimizer

extends Object
implements IMasterOptimizer<T>
java.lang.Object
   ↳ com.pnfsoftware.jeb.core.units.code.asm.decompiler.opt.AbstractMasterOptimizer<T>
Known Direct Subclasses

Class Overview

Standard implementation of a generic master optimizer.

Summary

[Expand]
Inherited Constants
From interface com.pnfsoftware.jeb.core.units.code.asm.decompiler.opt.IMasterOptimizer
Fields
protected int grp1NMaxRunCount maximum run count for the group [1..N] (<0 means no limit)
protected List<IMasterOptimizerInstrumenter<T>> instrumenters instrumenters
protected SortedMap<Integer, List<OptimizerEntry<T>>> optGrpMap groups of optimizers; groups 0 and -1 are entry and exit groups, respectively
protected List<OptimizerEntry<T>> optList list of all optimizers
protected T t default target
Public Constructors
AbstractMasterOptimizer(T t, int grp1NMaxRunCount)
Create a master optimizer.
Public Methods
OptimizerMode getMode()
Retrieve the current operating mode for this MO.
int getOptimizationCount(boolean deobfuscationOnly)
OptimizerEntry<T> getOptimizer(Class<? extends IOptimizer<T>> clazz)
IOptimizer<T> getOptimizerObject(Class<? extends IOptimizer<T>> clazz)
List<OptimizerEntry<T>> getRegisteredOptimizers(int groupId)
Get a copy of the lists of optimizer entries registered with this MO and belonging to the provided optimizer group.
List<OptimizerEntry<T>> getRegisteredOptimizers()
Get a copy of the list of optimizer entries registered with this MO.
T getTarget()
Get the target onto which the optimizations will be performed.
int getTotalOptimizationCount()
boolean isEnableDeobfuscators()
boolean isEnableUnsafeOptimizers()
int perform()
Perform an optimization pass.
int performMultiple(List<OptimizerEntry<T>> list)
Perform the provided optimizations, in sequence (which must have been previously registered).
int performSingle(OptimizerEntry<T> e)
Perform a single optimization, using the provided optimizer (which must have been previously registered).
void registerInstrumenter(IMasterOptimizerInstrumenter<T> instrumenter)
Register an instrumenter.
OptimizerEntry<T> registerOptimizer(int group, IOptimizer<T> opt)
Register an optimizer, using the optimizer's provided default priority.
OptimizerEntry<T> registerOptimizer(int group, IOptimizer<T> opt, double priority)
Register an optimizer.
OptimizerEntry<T> registerOptimizer(IOptimizer<T> opt)
Register an optimizer to the main group, using the optimizer's provided default priority.
PerfCountersOptimizer retrievePerformanceCounters()
void setEnableDeobfuscators(boolean enabled)
void setEnableUnsafeOptimizers(boolean enabled)
OptimizerMode setMode(OptimizerMode mode)
void setTarget(T t)
Set the optimizer's target.
void unregisterAllOptimizers()
boolean unregisterInstrumenter(IMasterOptimizerInstrumenter<T> instrumenter)
Unregister an instrumenter
boolean unregisterOptimizer(OptimizerEntry<T> e)
Remove an optimizer.
Protected Methods
abstract String getTargetAddress(T target)
boolean onOptimizerException(T target, IOptimizer<T> opt, Exception ex)
This method is called when an optimizer hard-failed and generated an exception.
int perform(int depth)
void postAllOptimizationsCallback(T target)
This method might be overridden, but the parent should be called first.
void postOptimizationCallback(T target, OptimizerEntry<T> e, int cnt, long executionTimeMs)
This method might be overridden, but the parent should be called first.
void preAllOptimizationsCallback(T target)
This method might be overridden, but the parent should be called first.
void preOptimizationCallback(T target, OptimizerEntry<T> e)
This method might be overridden, but the parent should be called first.
[Expand]
Inherited Methods
From class java.lang.Object
From interface com.pnfsoftware.jeb.core.units.code.asm.decompiler.opt.IMasterOptimizer

Fields

protected int grp1NMaxRunCount

maximum run count for the group [1..N] (<0 means no limit)

protected List<IMasterOptimizerInstrumenter<T>> instrumenters

instrumenters

protected SortedMap<Integer, List<OptimizerEntry<T>>> optGrpMap

groups of optimizers; groups 0 and -1 are entry and exit groups, respectively

protected List<OptimizerEntry<T>> optList

list of all optimizers

protected T t

default target

Public Constructors

public AbstractMasterOptimizer (T t, int grp1NMaxRunCount)

Create a master optimizer.

Parameters
t the default target, may be null
grp1NMaxRunCount maximum run count for the group [1..N]

Public Methods

public OptimizerMode getMode ()

Retrieve the current operating mode for this MO.

Returns
  • the current operating mode

public int getOptimizationCount (boolean deobfuscationOnly)

public OptimizerEntry<T> getOptimizer (Class<? extends IOptimizer<T>> clazz)

public IOptimizer<T> getOptimizerObject (Class<? extends IOptimizer<T>> clazz)

public List<OptimizerEntry<T>> getRegisteredOptimizers (int groupId)

Get a copy of the lists of optimizer entries registered with this MO and belonging to the provided optimizer group.

public List<OptimizerEntry<T>> getRegisteredOptimizers ()

Get a copy of the list of optimizer entries registered with this MO.

public T getTarget ()

Get the target onto which the optimizations will be performed.

public int getTotalOptimizationCount ()

public boolean isEnableDeobfuscators ()

public boolean isEnableUnsafeOptimizers ()

public int perform ()

Perform an optimization pass. All the optimizers will be run according to this master's schedule. They may be run multiple times.

Returns
  • the total number of optimizations performed

public int performMultiple (List<OptimizerEntry<T>> list)

Perform the provided optimizations, in sequence (which must have been previously registered).

public int performSingle (OptimizerEntry<T> e)

Perform a single optimization, using the provided optimizer (which must have been previously registered).

public void registerInstrumenter (IMasterOptimizerInstrumenter<T> instrumenter)

Register an instrumenter. Instrumenters will be called following their registration order.

public OptimizerEntry<T> registerOptimizer (int group, IOptimizer<T> opt)

Register an optimizer, using the optimizer's provided default priority. Refer to getDefaultPriority().

public OptimizerEntry<T> registerOptimizer (int group, IOptimizer<T> opt, double priority)

Register an optimizer.

public OptimizerEntry<T> registerOptimizer (IOptimizer<T> opt)

Register an optimizer to the main group, using the optimizer's provided default priority. Refer to getDefaultPriority().

public PerfCountersOptimizer retrievePerformanceCounters ()

public void setEnableDeobfuscators (boolean enabled)

public void setEnableUnsafeOptimizers (boolean enabled)

public OptimizerMode setMode (OptimizerMode mode)

public void setTarget (T t)

Set the optimizer's target.

public void unregisterAllOptimizers ()

public boolean unregisterInstrumenter (IMasterOptimizerInstrumenter<T> instrumenter)

Unregister an instrumenter

Returns
  • true if the instrumenter was removed, false otherwise

public boolean unregisterOptimizer (OptimizerEntry<T> e)

Remove an optimizer.

Protected Methods

protected abstract String getTargetAddress (T target)

protected boolean onOptimizerException (T target, IOptimizer<T> opt, Exception ex)

This method is called when an optimizer hard-failed and generated an exception.

Parameters
target the target that being optimized
opt the failing optimizer
ex the generated exception
Returns
  • if true, the exception will be neutered and the master optimizer will resume the optimizing process; else, the exception will be thrown

protected int perform (int depth)

protected void postAllOptimizationsCallback (T target)

This method might be overridden, but the parent should be called first.

protected void postOptimizationCallback (T target, OptimizerEntry<T> e, int cnt, long executionTimeMs)

This method might be overridden, but the parent should be called first. Note that this method might have a big impact on decompilation performance, so override carefully.

protected void preAllOptimizationsCallback (T target)

This method might be overridden, but the parent should be called first.

protected void preOptimizationCallback (T target, OptimizerEntry<T> e)

This method might be overridden, but the parent should be called first. Note that this method might have a big impact on decompilation performance, so override carefully.