From b9410f76a5ab3c57d6b0154e415c9cf7fc8636c9 Mon Sep 17 00:00:00 2001 From: Adam Date: Sun, 9 Aug 2015 12:11:17 -0400 Subject: [PATCH] remove unused blocks --- src/main/java/info/sigterm/deob/Deob.java | 1 - .../deob/deobfuscators/UnusedBlocks.java | 70 ------------------- 2 files changed, 71 deletions(-) delete mode 100644 src/main/java/info/sigterm/deob/deobfuscators/UnusedBlocks.java diff --git a/src/main/java/info/sigterm/deob/Deob.java b/src/main/java/info/sigterm/deob/Deob.java index 968e6ea49c..2cfd067420 100644 --- a/src/main/java/info/sigterm/deob/Deob.java +++ b/src/main/java/info/sigterm/deob/Deob.java @@ -2,7 +2,6 @@ package info.sigterm.deob; import info.sigterm.deob.deobfuscators.IllegalStateExceptions; import info.sigterm.deob.deobfuscators.RuntimeExceptions; -import info.sigterm.deob.deobfuscators.UnusedBlocks; import info.sigterm.deob.deobfuscators.UnusedFields; import info.sigterm.deob.deobfuscators.UnusedMethods; import info.sigterm.deob.deobfuscators.UnusedParameters; diff --git a/src/main/java/info/sigterm/deob/deobfuscators/UnusedBlocks.java b/src/main/java/info/sigterm/deob/deobfuscators/UnusedBlocks.java deleted file mode 100644 index a117f355f4..0000000000 --- a/src/main/java/info/sigterm/deob/deobfuscators/UnusedBlocks.java +++ /dev/null @@ -1,70 +0,0 @@ -package info.sigterm.deob.deobfuscators; - -import info.sigterm.deob.ClassFile; -import info.sigterm.deob.ClassGroup; -import info.sigterm.deob.Deobfuscator; -import info.sigterm.deob.Method; -import info.sigterm.deob.attributes.code.Instructions; -import info.sigterm.deob.block.Block; - -import java.util.ArrayList; -import java.util.List; - -public class UnusedBlocks implements Deobfuscator -{ - private List methods = new ArrayList<>(); - - public int pass(ClassGroup group) - { - int removed = 0; - methods: - for (Method m : new ArrayList<>(methods)) - { - if (m.getCode() == null) - { - methods.remove(m); - continue; - } - - Instructions ins = m.getCode().getInstructions(); - ins.buildBlocks(); - - for (int i = 0; i < ins.getBlocks().size(); ++i) - { - Block block = ins.getBlocks().get(i); - - // first block is the entrypoint, so its always used - if (i == 0) - continue; - - Block prev = ins.getBlocks().get(i - 1); - - if (prev.end.isTerminal() && block.begin.from.isEmpty() && block.handlers.isEmpty()) - { - ins.remove(block); - ++removed; - continue methods; - } - } - - methods.remove(m); - } - - System.out.println("Removed " + removed + " unused blocks"); - return removed; - } - - @Override - public void run(ClassGroup group) - { - for (ClassFile cf : group.getClasses()) - { - for (Method m : cf.getMethods().getMethods()) - { - methods.add(m); - } - } - - while (pass(group) > 0); - } -}