From 575deaf992b5324c6338d0fed9f28008a82bcf00 Mon Sep 17 00:00:00 2001 From: Adam Date: Thu, 10 Mar 2016 19:35:55 -0500 Subject: [PATCH] Sort stuff isnt required for graph stuff anymore, it was causing order of classes to load to be different when comparing obfuscated jar vs rebuilt jar, which caused class children order to be different, which affects renamer searching for bases which broke the issame comparison in invokeinterface. --- .../java/net/runelite/deob/ClassGroup.java | 2 +- .../code/instructions/InvokeInterface.java | 8 ++++-- .../code/instructions/InvokeVirtual.java | 26 ------------------- .../runelite/deob/pool/InterfaceMethod.java | 6 +++++ 4 files changed, 13 insertions(+), 29 deletions(-) diff --git a/src/main/java/net/runelite/deob/ClassGroup.java b/src/main/java/net/runelite/deob/ClassGroup.java index 29ed09f784..36aed0fdcd 100644 --- a/src/main/java/net/runelite/deob/ClassGroup.java +++ b/src/main/java/net/runelite/deob/ClassGroup.java @@ -48,7 +48,7 @@ public class ClassGroup public void initialize() { - sort(); + //sort(); buildClassGraph(); lookup(); } diff --git a/src/main/java/net/runelite/deob/attributes/code/instructions/InvokeInterface.java b/src/main/java/net/runelite/deob/attributes/code/instructions/InvokeInterface.java index 092bc5ed82..c4caa5c808 100644 --- a/src/main/java/net/runelite/deob/attributes/code/instructions/InvokeInterface.java +++ b/src/main/java/net/runelite/deob/attributes/code/instructions/InvokeInterface.java @@ -19,12 +19,10 @@ import net.runelite.deob.signature.Signature; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; -import java.util.ArrayList; import java.util.Arrays; import java.util.List; import net.runelite.deob.Field; import net.runelite.deob.attributes.code.instruction.types.GetFieldInstruction; -import net.runelite.deob.attributes.code.instruction.types.MappableInstruction; import net.runelite.deob.deobfuscators.Renamer; import net.runelite.deob.deobfuscators.rename.MappingExecutorUtil; import net.runelite.deob.deobfuscators.rename.ParallelExecutorMapping; @@ -41,6 +39,12 @@ public class InvokeInterface extends Instruction implements InvokeInstruction { super(instructions, type, pc); } + + @Override + public String toString() + { + return "invokeinterface " + method + " in " + this.getInstructions().getCode().getAttributes().getMethod() + " at pc 0x" + Integer.toHexString(this.getPc()); + } @Override public void load(DataInputStream is) throws IOException diff --git a/src/main/java/net/runelite/deob/attributes/code/instructions/InvokeVirtual.java b/src/main/java/net/runelite/deob/attributes/code/instructions/InvokeVirtual.java index 8ba027ba0b..950e5159b4 100644 --- a/src/main/java/net/runelite/deob/attributes/code/instructions/InvokeVirtual.java +++ b/src/main/java/net/runelite/deob/attributes/code/instructions/InvokeVirtual.java @@ -19,9 +19,7 @@ import net.runelite.deob.signature.Signature; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; -import java.util.ArrayList; import java.util.Arrays; -import java.util.HashSet; import java.util.List; import java.util.Set; import net.runelite.deob.Field; @@ -108,36 +106,12 @@ public class InvokeVirtual extends Instruction implements InvokeInstruction frame.addInstructionContext(ins); } - // find the possible methods this instruction might be invoking. we can't know for sure - // which method is being invoked without tracking the types of objects in fields and when - // passed in parameters/return values. @Override public List getMethods() { return myMethods != null ? myMethods : Arrays.asList(); } - private void findMethodFromClass(Set visited, List list, ClassFile clazz) - { - if (visited.contains(clazz)) - return; - visited.add(clazz); - - ClassFile parent = clazz.getParent(); - if (parent != null) - findMethodFromClass(visited, list, parent); - - for (ClassFile cf : clazz.getInterfaces().getMyInterfaces()) - findMethodFromClass(visited, list, cf); - - net.runelite.deob.Method m = clazz.findMethod(method.getNameAndType()); - if (m != null && !list.contains(m)) - list.add(m); - - for (ClassFile cf : clazz.getChildren()) - findMethodFromClass(visited, list, cf); - } - @Override public void removeParameter(int idx) { diff --git a/src/main/java/net/runelite/deob/pool/InterfaceMethod.java b/src/main/java/net/runelite/deob/pool/InterfaceMethod.java index 562c35540f..78c896bcad 100644 --- a/src/main/java/net/runelite/deob/pool/InterfaceMethod.java +++ b/src/main/java/net/runelite/deob/pool/InterfaceMethod.java @@ -34,6 +34,12 @@ public class InterfaceMethod extends PoolEntry { return new InterfaceMethod(clazz.copy(), nat.copy()); } + + @Override + public java.lang.String toString() + { + return clazz + "." + nat; + } @Override public void resolve(ConstantPool pool)