public abstract class

AbstractEBlockOptimizer

extends AbstractEOptimizer
java.lang.Object
   ↳ com.pnfsoftware.jeb.core.AbstractPlugin
     ↳ com.pnfsoftware.jeb.core.units.code.asm.decompiler.opt.AbstractOptimizer<T>
       ↳ com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.opt.AbstractEOptimizer
         ↳ com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.opt.AbstractEBlockOptimizer

Class Overview

Skeleton for an IRE basic block optimizer.

Summary

[Expand]
Inherited Constants
From interface com.pnfsoftware.jeb.core.units.code.asm.decompiler.opt.IOptimizer
[Expand]
Inherited Fields
From class com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.opt.AbstractEOptimizer
From class com.pnfsoftware.jeb.core.units.code.asm.decompiler.opt.AbstractOptimizer
Public Constructors
AbstractEBlockOptimizer()
AbstractEBlockOptimizer(DataChainsUpdatePolicy dataChainsUpdatePolicy)
AbstractEBlockOptimizer(IERoutineContext ctx, DataChainsUpdatePolicy dataChainsUpdatePolicy)
Public Methods
int perform(boolean updateDFA)
Perform the optimization pass.
Protected Methods
abstract int optimizeBlock(BasicBlock<IEStatement> b)
Attempt to optimize a basic block.
[Expand]
Inherited Methods
From class com.pnfsoftware.jeb.core.units.code.asm.decompiler.ir.opt.AbstractEOptimizer
From class com.pnfsoftware.jeb.core.units.code.asm.decompiler.opt.AbstractOptimizer
From class com.pnfsoftware.jeb.core.AbstractPlugin
From class java.lang.Object
From interface com.pnfsoftware.jeb.core.IPlugin
From interface com.pnfsoftware.jeb.core.units.code.asm.decompiler.opt.IOptimizer

Public Constructors

public AbstractEBlockOptimizer ()

public AbstractEBlockOptimizer (DataChainsUpdatePolicy dataChainsUpdatePolicy)

public AbstractEBlockOptimizer (IERoutineContext ctx, DataChainsUpdatePolicy dataChainsUpdatePolicy)

Public Methods

public int perform (boolean updateDFA)

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.

Note: in what scenario would you want when to use perform(false) ? one example is to optimize performances when chain-calling optimizers in a master optimizer for example. TODO: describe one scenario in detail.

Parameters
updateDFA if true, update data chains according to the optimizer's policy; if false, the optimizer should not perform final DFA computations if needed
Returns
  • the number of optimizations performed; if negative, an error has occurred and the optimizing process should be aborted

Protected Methods

protected abstract int optimizeBlock (BasicBlock<IEStatement> b)

Attempt to optimize a basic block. All instruction in the block may be modified.

Parameters
b a basic block
Returns
  • the number of optimizations performed in the block