Jode 1.90-CVS
Build Aug 6, 2004

net.sf.jode.obfuscator.modules
Class ConstantAnalyzer

java.lang.Object
  extended bynet.sf.jode.obfuscator.modules.SimpleAnalyzer
      extended bynet.sf.jode.obfuscator.modules.ConstantAnalyzer
All Implemented Interfaces:
CodeAnalyzer, CodeTransformer, Opcodes

public class ConstantAnalyzer
extends SimpleAnalyzer

Analyze the code, assuming every field that is not yet written to is constant. This may imply that some code is dead code. While we analyze the Code we remember, which local variable and which stack slot is constant for each instruction and if the instruction is dead. First we assume that every local and every slot is constant for each instruction, and that all instructions are dead code. Now we mark all local variables of the first instruction as not constant and the first instruction as modified. While there is a modified instruction, we pick one and repeat the following algorithm: If the instruction produces a constant result (because it is a ldc instruction, or it combines constant values), we put that instruction on the ConstantListener-Queue of all constant inputs and put the constant result on the ConstantListener-Queue of that instruction.

Author:
Jochen Hoenicke

Field Summary
 
Fields inherited from interface net.sf.jode.bytecode.Opcodes
constants, newArrayTypes, opc_aaload, opc_aastore, opc_aconst_null, opc_aload, opc_aload_0, opc_aload_1, opc_aload_2, opc_aload_3, opc_anewarray, opc_areturn, opc_arraylength, opc_astore, opc_astore_0, opc_astore_1, opc_astore_2, opc_astore_3, opc_athrow, opc_baload, opc_bastore, opc_bipush, opc_breakpoint, opc_caload, opc_castore, opc_checkcast, opc_d2f, opc_d2i, opc_d2l, opc_dadd, opc_daload, opc_dastore, opc_dcmpg, opc_dcmpl, opc_dconst_0, opc_dconst_1, opc_ddiv, opc_dload, opc_dload_0, opc_dload_1, opc_dload_2, opc_dload_3, opc_dmul, opc_dneg, opc_drem, opc_dreturn, opc_dstore, opc_dstore_0, opc_dstore_1, opc_dstore_2, opc_dstore_3, opc_dsub, opc_dup, opc_dup_x1, opc_dup_x2, opc_dup2, opc_dup2_x1, opc_dup2_x2, opc_f2d, opc_f2i, opc_f2l, opc_fadd, opc_faload, opc_fastore, opc_fcmpg, opc_fcmpl, opc_fconst_0, opc_fconst_1, opc_fconst_2, opc_fdiv, opc_fload, opc_fload_0, opc_fload_1, opc_fload_2, opc_fload_3, opc_fmul, opc_fneg, opc_frem, opc_freturn, opc_fstore, opc_fstore_0, opc_fstore_1, opc_fstore_2, opc_fstore_3, opc_fsub, opc_getfield, opc_getstatic, opc_goto, opc_goto_w, opc_i2b, opc_i2c, opc_i2d, opc_i2f, opc_i2l, opc_i2s, opc_iadd, opc_iaload, opc_iand, opc_iastore, opc_iconst_0, opc_iconst_1, opc_iconst_2, opc_iconst_3, opc_iconst_4, opc_iconst_5, opc_iconst_m1, opc_idiv, opc_if_acmpeq, opc_if_acmpne, opc_if_icmpeq, opc_if_icmpge, opc_if_icmpgt, opc_if_icmple, opc_if_icmplt, opc_if_icmpne, opc_ifeq, opc_ifge, opc_ifgt, opc_ifle, opc_iflt, opc_ifne, opc_ifnonnull, opc_ifnull, opc_iinc, opc_iload, opc_iload_0, opc_iload_1, opc_iload_2, opc_iload_3, opc_impdep1, opc_impdep2, opc_imul, opc_ineg, opc_instanceof, opc_invokeinterface, opc_invokespecial, opc_invokestatic, opc_invokevirtual, opc_ior, opc_irem, opc_ireturn, opc_ishl, opc_ishr, opc_istore, opc_istore_0, opc_istore_1, opc_istore_2, opc_istore_3, opc_isub, opc_iushr, opc_ixor, opc_jsr, opc_jsr_w, opc_l2d, opc_l2f, opc_l2i, opc_ladd, opc_laload, opc_land, opc_lastore, opc_lcmp, opc_lconst_0, opc_lconst_1, opc_ldc, opc_ldc_w, opc_ldc2_w, opc_ldiv, opc_lload, opc_lload_0, opc_lload_1, opc_lload_2, opc_lload_3, opc_lmul, opc_lneg, opc_lookupswitch, opc_lor, opc_lrem, opc_lreturn, opc_lshl, opc_lshr, opc_lstore, opc_lstore_0, opc_lstore_1, opc_lstore_2, opc_lstore_3, opc_lsub, opc_lushr, opc_lxor, opc_monitorenter, opc_monitorexit, opc_multianewarray, opc_new, opc_newarray, opc_nop, opc_pop, opc_pop2, opc_putfield, opc_putstatic, opc_ret, opc_return, opc_saload, opc_sastore, opc_sipush, opc_swap, opc_tableswitch, opc_wide, opc_xxxunusedxxx, opcodeString
 
Constructor Summary
ConstantAnalyzer()
           
 
Method Summary
 void analyzeCode(MethodIdentifier methodIdent, BasicBlocks bb)
          Reads the opcodes out of the code info and determine its references
 void dumpBlockInfo(java.io.PrintWriter output)
           
 void fieldNotConstant(FieldIdentifier fi)
           
static void replaceWith(java.util.ArrayList newCode, Instruction instr, Instruction replacement)
           
 void transformCode(BasicBlocks bb)
           
 
Methods inherited from class net.sf.jode.obfuscator.modules.SimpleAnalyzer
canonizeReference
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ConstantAnalyzer

public ConstantAnalyzer()
Method Detail

fieldNotConstant

public void fieldNotConstant(FieldIdentifier fi)

dumpBlockInfo

public void dumpBlockInfo(java.io.PrintWriter output)

analyzeCode

public void analyzeCode(MethodIdentifier methodIdent,
                        BasicBlocks bb)
Description copied from class: SimpleAnalyzer
Reads the opcodes out of the code info and determine its references

Specified by:
analyzeCode in interface CodeAnalyzer
Overrides:
analyzeCode in class SimpleAnalyzer
Returns:
an enumeration of the references.

replaceWith

public static void replaceWith(java.util.ArrayList newCode,
                               Instruction instr,
                               Instruction replacement)

transformCode

public void transformCode(BasicBlocks bb)
Specified by:
transformCode in interface CodeTransformer
Overrides:
transformCode in class SimpleAnalyzer

Jode 1.90-CVS
Build Aug 6, 2004

Copyright © 1998-2004 by Jochen Hoenicke.