diff --git a/src/main/java/net/runelite/deob/deobfuscators/rename/ParallelExecutorMapping.java b/src/main/java/net/runelite/deob/deobfuscators/rename/ParallelExecutorMapping.java index 3d35119933..f53ee20707 100644 --- a/src/main/java/net/runelite/deob/deobfuscators/rename/ParallelExecutorMapping.java +++ b/src/main/java/net/runelite/deob/deobfuscators/rename/ParallelExecutorMapping.java @@ -9,10 +9,6 @@ public class ParallelExecutorMapping public void map(Object one, Object two) { - if (one.toString().equals("Z class6.field120")) - { - int i =5; - } assert !map.containsKey(one) || map.get(one) == two; map.put(one, two); } diff --git a/src/main/java/net/runelite/deob/execution/ParallellMappingExecutor.java b/src/main/java/net/runelite/deob/execution/ParallellMappingExecutor.java index 880cfb7edc..e9a04bfc54 100644 --- a/src/main/java/net/runelite/deob/execution/ParallellMappingExecutor.java +++ b/src/main/java/net/runelite/deob/execution/ParallellMappingExecutor.java @@ -1,5 +1,6 @@ package net.runelite.deob.execution; +import java.util.List; import net.runelite.deob.Method; import net.runelite.deob.attributes.code.instruction.types.ReturnInstruction; import net.runelite.deob.attributes.code.instructions.InvokeStatic; @@ -55,17 +56,6 @@ public class ParallellMappingExecutor // get what each frame is paused/exited on p1 = f1.getInstructions().get(f1.getInstructions().size() - 1); p2 = f2.getInstructions().get(f2.getInstructions().size() - 1); - - if (p1.getInstruction() instanceof InvokeStatic && !(p2.getInstruction() instanceof InvokeStatic)) - { - f1 = stepInto(f1); - p1 = f1.getInstructions().get(f1.getInstructions().size() - 1); - } - else if (p2.getInstruction() instanceof InvokeStatic && !(p1.getInstruction() instanceof InvokeStatic)) - { - f2 = stepInto(f2); - p2 = f2.getInstructions().get(f2.getInstructions().size() - 1); - } // frames can stop executing at different times if one sees a jump // that has been done before, so stop both and remove the pending branch @@ -91,6 +81,17 @@ public class ParallellMappingExecutor return step(); } + + if (p1.getInstruction() instanceof InvokeStatic && !(p2.getInstruction() instanceof InvokeStatic)) + { + f1 = stepInto(f1); + p1 = f1.getInstructions().get(f1.getInstructions().size() - 1); + } + else if (p2.getInstruction() instanceof InvokeStatic && !(p1.getInstruction() instanceof InvokeStatic)) + { + f2 = stepInto(f2); + p2 = f2.getInstructions().get(f2.getInstructions().size() - 1); + } assert e.paused; assert e2.paused; @@ -119,6 +120,10 @@ public class ParallellMappingExecutor assert i.getInstruction() instanceof InvokeStatic; InvokeStatic is = (InvokeStatic) i.getInstruction(); + List methods = is.getMethods(); + if (methods.isEmpty()) // not my method + return null; + Method to = is.getMethods().get(0); Frame f2 = new Frame(e, to); diff --git a/src/test/java/net/runelite/deob/deobfuscators/rename/MapStaticTest.java b/src/test/java/net/runelite/deob/deobfuscators/rename/MapStaticTest.java index fea8f47f35..7641ff3cb8 100644 --- a/src/test/java/net/runelite/deob/deobfuscators/rename/MapStaticTest.java +++ b/src/test/java/net/runelite/deob/deobfuscators/rename/MapStaticTest.java @@ -10,6 +10,12 @@ import org.junit.Test; public class MapStaticTest { + private static final String methods[][] = { + { "client.vmethod3054", "client.vmethod2973" }, + { "class99.method2220", "class99.method2149" }, + { "class146.vmethod3158", "class146.vmethod3070" }, + }; + //@Test public void testMappable() throws IOException { @@ -22,14 +28,31 @@ public class MapStaticTest // )); } + //@Test + public void testAll() throws IOException + { + ClassGroup group1 = JarUtil.loadJar(new File("d:/rs/07/adamin1.jar")); + ClassGroup group2 = JarUtil.loadJar(new File("d:/rs/07/adamin2.jar")); + + for (String[] s : methods) + { + String[] one = s[0].split("\\."), two = s[1].split("\\."); + + Method m1 = group1.findClass(one[0]).findMethod(one[1]); + Method m2 = group2.findClass(two[0]).findMethod(two[1]); + + ParallelExecutorMapping mappings = MappingExecutorUtil.map(m1, m2); + } + } + @Test public void test() throws IOException { - ClassGroup group1 = JarUtil.loadJar(new File("c:/rs/adamin1.jar")); - ClassGroup group2 = JarUtil.loadJar(new File("c:/rs/adamin2.jar")); + ClassGroup group1 = JarUtil.loadJar(new File("d:/rs/07/adamin1.jar")); + ClassGroup group2 = JarUtil.loadJar(new File("d:/rs/07/adamin2.jar")); - Method m1 = group1.findClass("client").findMethod("vmethod3054"); - Method m2 = group2.findClass("client").findMethod("vmethod2973"); + Method m1 = group1.findClass("class146").findMethod("vmethod3158"); + Method m2 = group2.findClass("class146").findMethod("vmethod3070"); ParallelExecutorMapping mappings = MappingExecutorUtil.map(m1, m2); }