Map invoke arguments
This commit is contained in:
@@ -22,6 +22,8 @@ import java.io.IOException;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
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.attributes.code.instruction.types.MappableInstruction;
|
||||||
import net.runelite.deob.deobfuscators.rename.MappingExecutorUtil;
|
import net.runelite.deob.deobfuscators.rename.MappingExecutorUtil;
|
||||||
import net.runelite.deob.deobfuscators.rename.ParallelExecutorMapping;
|
import net.runelite.deob.deobfuscators.rename.ParallelExecutorMapping;
|
||||||
@@ -171,6 +173,29 @@ public class InvokeInterface extends Instruction implements InvokeInstruction
|
|||||||
|
|
||||||
for (int i = 0; i < myMethods.size(); ++i)
|
for (int i = 0; i < myMethods.size(); ++i)
|
||||||
mapping.map(myMethods.get(i), otherMethods.get(i));
|
mapping.map(myMethods.get(i), otherMethods.get(i));
|
||||||
|
|
||||||
|
for (int i = 0; i < ctx.getPops().size(); ++i)
|
||||||
|
{
|
||||||
|
StackContext s1 = ctx.getPops().get(i),
|
||||||
|
s2 = other.getPops().get(i);
|
||||||
|
|
||||||
|
InstructionContext base1 = MappingExecutorUtil.resolve(s1.getPushed(), s1);
|
||||||
|
InstructionContext base2 = MappingExecutorUtil.resolve(s2.getPushed(), s2);
|
||||||
|
|
||||||
|
if (base1.getInstruction() instanceof GetFieldInstruction && base2.getInstruction() instanceof GetFieldInstruction)
|
||||||
|
{
|
||||||
|
GetFieldInstruction gf1 = (GetFieldInstruction) base1.getInstruction(),
|
||||||
|
gf2 = (GetFieldInstruction) base2.getInstruction();
|
||||||
|
|
||||||
|
Field f1 = gf1.getMyField(),
|
||||||
|
f2 = gf2.getMyField();
|
||||||
|
|
||||||
|
if (f1 != null && f2 != null)
|
||||||
|
{
|
||||||
|
mapping.map(f1, f2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ import java.io.IOException;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import net.runelite.deob.Field;
|
||||||
|
import net.runelite.deob.attributes.code.instruction.types.GetFieldInstruction;
|
||||||
import net.runelite.deob.deobfuscators.rename.MappingExecutorUtil;
|
import net.runelite.deob.deobfuscators.rename.MappingExecutorUtil;
|
||||||
import net.runelite.deob.deobfuscators.rename.ParallelExecutorMapping;
|
import net.runelite.deob.deobfuscators.rename.ParallelExecutorMapping;
|
||||||
import net.runelite.deob.execution.Execution;
|
import net.runelite.deob.execution.Execution;
|
||||||
@@ -171,6 +173,29 @@ public class InvokeSpecial extends Instruction implements InvokeInstruction
|
|||||||
|
|
||||||
for (int i = 0; i < myMethods.size(); ++i)
|
for (int i = 0; i < myMethods.size(); ++i)
|
||||||
mapping.map(myMethods.get(i), otherMethods.get(i));
|
mapping.map(myMethods.get(i), otherMethods.get(i));
|
||||||
|
|
||||||
|
for (int i = 0; i < ctx.getPops().size(); ++i)
|
||||||
|
{
|
||||||
|
StackContext s1 = ctx.getPops().get(i),
|
||||||
|
s2 = other.getPops().get(i);
|
||||||
|
|
||||||
|
InstructionContext base1 = MappingExecutorUtil.resolve(s1.getPushed(), s1);
|
||||||
|
InstructionContext base2 = MappingExecutorUtil.resolve(s2.getPushed(), s2);
|
||||||
|
|
||||||
|
if (base1.getInstruction() instanceof GetFieldInstruction && base2.getInstruction() instanceof GetFieldInstruction)
|
||||||
|
{
|
||||||
|
GetFieldInstruction gf1 = (GetFieldInstruction) base1.getInstruction(),
|
||||||
|
gf2 = (GetFieldInstruction) base2.getInstruction();
|
||||||
|
|
||||||
|
Field f1 = gf1.getMyField(),
|
||||||
|
f2 = gf2.getMyField();
|
||||||
|
|
||||||
|
if (f1 != null && f2 != null)
|
||||||
|
{
|
||||||
|
mapping.map(f1, f2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -22,6 +22,8 @@ import java.io.IOException;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import net.runelite.deob.Field;
|
||||||
|
import net.runelite.deob.attributes.code.instruction.types.GetFieldInstruction;
|
||||||
import net.runelite.deob.deobfuscators.rename.MappingExecutorUtil;
|
import net.runelite.deob.deobfuscators.rename.MappingExecutorUtil;
|
||||||
import net.runelite.deob.deobfuscators.rename.ParallelExecutorMapping;
|
import net.runelite.deob.deobfuscators.rename.ParallelExecutorMapping;
|
||||||
import net.runelite.deob.execution.Execution;
|
import net.runelite.deob.execution.Execution;
|
||||||
@@ -173,6 +175,29 @@ public class InvokeStatic extends Instruction implements InvokeInstruction
|
|||||||
|
|
||||||
for (int i = 0; i < myMethods.size(); ++i)
|
for (int i = 0; i < myMethods.size(); ++i)
|
||||||
mapping.map(myMethods.get(i), otherMethods.get(i));
|
mapping.map(myMethods.get(i), otherMethods.get(i));
|
||||||
|
|
||||||
|
for (int i = 0; i < ctx.getPops().size(); ++i)
|
||||||
|
{
|
||||||
|
StackContext s1 = ctx.getPops().get(i),
|
||||||
|
s2 = other.getPops().get(i);
|
||||||
|
|
||||||
|
InstructionContext base1 = MappingExecutorUtil.resolve(s1.getPushed(), s1);
|
||||||
|
InstructionContext base2 = MappingExecutorUtil.resolve(s2.getPushed(), s2);
|
||||||
|
|
||||||
|
if (base1.getInstruction() instanceof GetFieldInstruction && base2.getInstruction() instanceof GetFieldInstruction)
|
||||||
|
{
|
||||||
|
GetFieldInstruction gf1 = (GetFieldInstruction) base1.getInstruction(),
|
||||||
|
gf2 = (GetFieldInstruction) base2.getInstruction();
|
||||||
|
|
||||||
|
Field f1 = gf1.getMyField(),
|
||||||
|
f2 = gf2.getMyField();
|
||||||
|
|
||||||
|
if (f1 != null && f2 != null)
|
||||||
|
{
|
||||||
|
mapping.map(f1, f2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ import java.util.Arrays;
|
|||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
import net.runelite.deob.Field;
|
||||||
|
import net.runelite.deob.attributes.code.instruction.types.GetFieldInstruction;
|
||||||
import net.runelite.deob.deobfuscators.rename.MappingExecutorUtil;
|
import net.runelite.deob.deobfuscators.rename.MappingExecutorUtil;
|
||||||
import net.runelite.deob.deobfuscators.rename.ParallelExecutorMapping;
|
import net.runelite.deob.deobfuscators.rename.ParallelExecutorMapping;
|
||||||
import net.runelite.deob.execution.Execution;
|
import net.runelite.deob.execution.Execution;
|
||||||
@@ -194,6 +196,32 @@ public class InvokeVirtual extends Instruction implements InvokeInstruction
|
|||||||
|
|
||||||
mapping.map(m1, m2);
|
mapping.map(m1, m2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* map arguments */
|
||||||
|
assert ctx.getPops().size() == other.getPops().size();
|
||||||
|
|
||||||
|
for (int i = 0; i < ctx.getPops().size(); ++i)
|
||||||
|
{
|
||||||
|
StackContext s1 = ctx.getPops().get(i),
|
||||||
|
s2 = other.getPops().get(i);
|
||||||
|
|
||||||
|
InstructionContext base1 = MappingExecutorUtil.resolve(s1.getPushed(), s1);
|
||||||
|
InstructionContext base2 = MappingExecutorUtil.resolve(s2.getPushed(), s2);
|
||||||
|
|
||||||
|
if (base1.getInstruction() instanceof GetFieldInstruction && base2.getInstruction() instanceof GetFieldInstruction)
|
||||||
|
{
|
||||||
|
GetFieldInstruction gf1 = (GetFieldInstruction) base1.getInstruction(),
|
||||||
|
gf2 = (GetFieldInstruction) base2.getInstruction();
|
||||||
|
|
||||||
|
Field f1 = gf1.getMyField(),
|
||||||
|
f2 = gf2.getMyField();
|
||||||
|
|
||||||
|
if (f1 != null && f2 != null)
|
||||||
|
{
|
||||||
|
mapping.map(f1, f2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user