diff --git a/src/main/java/info/sigterm/deob/deobfuscators/ConstantParameter.java b/src/main/java/info/sigterm/deob/deobfuscators/ConstantParameter.java index 560894ca4f..94c8408bee 100644 --- a/src/main/java/info/sigterm/deob/deobfuscators/ConstantParameter.java +++ b/src/main/java/info/sigterm/deob/deobfuscators/ConstantParameter.java @@ -27,6 +27,15 @@ class MethodGroup public List methods; // methods that can be invoked public Collection constantParameters; // parameters which are always constant for all invocations public List cmps = new ArrayList<>(); // cmps for all methods in the group, which hold the values. + + public List getConstantParametersFor(Method m, int parameter) + { + List out = new ArrayList<>(); + for (ConstantMethodParameter c : cmps) + if (c.method == m && c.paramNum == parameter) + out.add(c); + return out; + } } public class ConstantParameter implements Deobfuscator @@ -116,6 +125,24 @@ public class ConstantParameter implements Deobfuscator } } + private void findLogicallyDeadOperations() + { + for (Object ogroup : methodGroups.values()) + { + MethodGroup group = (MethodGroup) ogroup; + for (Method m : group.methods) + for (int parameterIndex : group.constantParameters) + { + // constants used in this parameter index when calling this method + List cmps = group.getConstantParametersFor(m, parameterIndex); + + // iterate instructions of method and find comparisons to parameter + // remove if all are logically dead. rely on unused parameter deob to remove + // the parameter. + } + } + } + @Override public void run(ClassGroup group) {