init field order fix

This commit is contained in:
Adam
2016-02-05 20:22:13 -05:00
parent e9103882b4
commit 2854abfb08
14 changed files with 30 additions and 20 deletions

View File

@@ -9,5 +9,5 @@ public interface MappableInstruction
boolean isSame(InstructionContext thisIc, InstructionContext otherIc);
boolean canMap();
boolean canMap(InstructionContext thisIc);
}

View File

@@ -156,7 +156,7 @@ public abstract class If extends Instruction implements JumpingInstruction, Comp
}
@Override
public boolean canMap()
public boolean canMap(InstructionContext thisIc)
{
return true;
}

View File

@@ -159,7 +159,7 @@ public abstract class If0 extends Instruction implements JumpingInstruction, Com
}
@Override
public boolean canMap()
public boolean canMap(InstructionContext thisIc)
{
return true;
}

View File

@@ -21,7 +21,7 @@ public class IfNe extends If0
if (super.isSame(thisIc, otherIc))
return true;
if (otherIc.getInstruction() instanceof IfICmpNe)
if (otherIc.getInstruction() instanceof IfICmpNe || otherIc.getInstruction() instanceof IfICmpEq)
{
// check for one side being 0
StackContext s1 = otherIc.getPops().get(0),
@@ -59,7 +59,7 @@ public class IfNe extends If0
@Override
public void map(ParallelExecutorMapping mapping, InstructionContext ctx, InstructionContext other)
{
if (other.getInstruction() instanceof IfEq)
if (other.getInstruction() instanceof IfEq || other.getInstruction() instanceof IfICmpEq)
{
super.mapOtherBranch(mapping, ctx, other);
}

View File

@@ -180,7 +180,7 @@ public class InvokeInterface extends Instruction implements InvokeInstruction
}
@Override
public boolean canMap()
public boolean canMap(InstructionContext thisIc)
{
return MappingExecutorUtil.isMappable(this);
}

View File

@@ -181,7 +181,7 @@ public class InvokeSpecial extends Instruction implements InvokeInstruction
}
@Override
public boolean canMap()
public boolean canMap(InstructionContext thisIc)
{
return MappingExecutorUtil.isMappable(this);
}

View File

@@ -183,7 +183,7 @@ public class InvokeStatic extends Instruction implements InvokeInstruction
}
@Override
public boolean canMap()
public boolean canMap(InstructionContext thisIc)
{
return MappingExecutorUtil.isMappable(this);
}

View File

@@ -203,7 +203,7 @@ public class InvokeVirtual extends Instruction implements InvokeInstruction
}
@Override
public boolean canMap()
public boolean canMap(InstructionContext thisIc)
{
return MappingExecutorUtil.isMappable(this);
}

View File

@@ -130,8 +130,13 @@ public class PutField extends Instruction implements SetFieldInstruction
}
@Override
public boolean canMap()
public boolean canMap(InstructionContext thisIc)
{
StackContext value = thisIc.getPops().get(0);
Instruction i = value.getPushed().getInstruction();
if (thisIc.getFrame().getMethod().getName().equals("<init>"))
if (i instanceof PushConstantInstruction || i instanceof AConstNull)
return false;
return true;
}
}

View File

@@ -112,7 +112,7 @@ public class PutStatic extends Instruction implements SetFieldInstruction
}
@Override
public boolean canMap()
public boolean canMap(InstructionContext thisIc)
{
return true;
}

View File

@@ -0,0 +1,6 @@
package net.runelite.deob.deobfuscators.rename;
public class MappingException extends Exception
{
}

View File

@@ -59,7 +59,7 @@ public class MappingExecutorUtil
return map1.equals(map2);
}
public static ParallelExecutorMapping map(Method m1, Method m2)
public static ParallelExecutorMapping map(Method m1, Method m2) throws MappingException
{
ClassGroup group1 = m1.getMethods().getClassFile().getGroup();
ClassGroup group2 = m2.getMethods().getClassFile().getGroup();
@@ -103,9 +103,8 @@ public class MappingExecutorUtil
if (!mi1.isSame(p1, p2))
{
assert mi1.isSame(p1, p2);
throw new MappingException();
}
//assert p1.getInstruction().getClass().equals(p2.getInstruction().getClass());
mi1.map(mappings, p1, p2);

View File

@@ -257,7 +257,7 @@ public class Frame
if (execution.step && oldCur instanceof MappableInstruction)
{
MappableInstruction mi = (MappableInstruction) oldCur;
if (mi.canMap())
if (mi.canMap(ictx))
{
execution.paused = true;
return;

View File

@@ -63,7 +63,7 @@ public class MapStaticTest
// }
@Test
public void testAll() throws IOException
public void testAll() throws IOException, MappingException
{
ClassGroup group1 = JarUtil.loadJar(new File(JAR1));
ClassGroup group2 = JarUtil.loadJar(new File(JAR2));
@@ -80,7 +80,7 @@ public class MapStaticTest
}
@Test
public void test() throws IOException
public void test() throws IOException, MappingException
{
ClassGroup group1 = JarUtil.loadJar(new File(JAR1));
ClassGroup group2 = JarUtil.loadJar(new File(JAR2));
@@ -103,7 +103,7 @@ public class MapStaticTest
//Assert.assertNotNull(other);
}
private static boolean test;
private static boolean test = true;
@Test
public void testDeep() throws IOException
@@ -220,8 +220,8 @@ public class MapStaticTest
catch (Throwable ex)
{
System.err.println("Error mapping " + m1 + " to " + m2);
if (test)
throw ex;
//if (test)
// throw ex;
return;
}