map value of putfields
This commit is contained in:
@@ -17,8 +17,10 @@ import java.io.DataInputStream;
|
|||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import net.runelite.deob.Method;
|
import net.runelite.deob.Method;
|
||||||
|
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.attributes.code.instruction.types.PushConstantInstruction;
|
import net.runelite.deob.attributes.code.instruction.types.PushConstantInstruction;
|
||||||
|
import net.runelite.deob.deobfuscators.rename.MappingExecutorUtil;
|
||||||
import net.runelite.deob.deobfuscators.rename.ParallelExecutorMapping;
|
import net.runelite.deob.deobfuscators.rename.ParallelExecutorMapping;
|
||||||
|
|
||||||
public class PutField extends Instruction implements SetFieldInstruction
|
public class PutField extends Instruction implements SetFieldInstruction
|
||||||
@@ -98,11 +100,6 @@ public class PutField extends Instruction implements SetFieldInstruction
|
|||||||
field = myField.getPoolField();
|
field = myField.getPoolField();
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isConstantAssignment(InstructionContext ctx)
|
|
||||||
{
|
|
||||||
return ctx.getPops().get(0).getPushed().getInstruction() instanceof PushConstantInstruction;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void map(ParallelExecutorMapping mapping, InstructionContext ctx, InstructionContext other)
|
public void map(ParallelExecutorMapping mapping, InstructionContext ctx, InstructionContext other)
|
||||||
{
|
{
|
||||||
@@ -112,6 +109,28 @@ public class PutField extends Instruction implements SetFieldInstruction
|
|||||||
assert myField.getType().equals(otherField.getType());
|
assert myField.getType().equals(otherField.getType());
|
||||||
|
|
||||||
mapping.map(myField, otherField);
|
mapping.map(myField, otherField);
|
||||||
|
|
||||||
|
// map assignment
|
||||||
|
|
||||||
|
StackContext object1 = ctx.getPops().get(1),
|
||||||
|
object2 = other.getPops().get(1);
|
||||||
|
|
||||||
|
InstructionContext base1 = MappingExecutorUtil.resolve(object1.getPushed(), object1);
|
||||||
|
InstructionContext base2 = MappingExecutorUtil.resolve(object2.getPushed(), object2);
|
||||||
|
|
||||||
|
if (base1.getInstruction() instanceof GetFieldInstruction && base2.getInstruction() instanceof GetFieldInstruction)
|
||||||
|
{
|
||||||
|
GetFieldInstruction gf1 = (GetFieldInstruction) base1.getInstruction(),
|
||||||
|
gf2 = (GetFieldInstruction) base2.getInstruction();
|
||||||
|
|
||||||
|
net.runelite.deob.Field f1 = gf1.getMyField(),
|
||||||
|
f2 = gf2.getMyField();
|
||||||
|
|
||||||
|
if (f1 != null && f2 != null)
|
||||||
|
{
|
||||||
|
mapping.map(f1, f2);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -17,7 +17,9 @@ import java.io.DataInputStream;
|
|||||||
import java.io.DataOutputStream;
|
import java.io.DataOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import net.runelite.deob.Method;
|
import net.runelite.deob.Method;
|
||||||
|
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.ParallelExecutorMapping;
|
import net.runelite.deob.deobfuscators.rename.ParallelExecutorMapping;
|
||||||
|
|
||||||
public class PutStatic extends Instruction implements SetFieldInstruction
|
public class PutStatic extends Instruction implements SetFieldInstruction
|
||||||
@@ -105,6 +107,26 @@ public class PutStatic extends Instruction implements SetFieldInstruction
|
|||||||
assert myField.getType().equals(otherField.getType());
|
assert myField.getType().equals(otherField.getType());
|
||||||
|
|
||||||
mapping.map(myField, otherField);
|
mapping.map(myField, otherField);
|
||||||
|
|
||||||
|
StackContext object1 = ctx.getPops().get(0),
|
||||||
|
object2 = other.getPops().get(0);
|
||||||
|
|
||||||
|
InstructionContext base1 = MappingExecutorUtil.resolve(object1.getPushed(), object1);
|
||||||
|
InstructionContext base2 = MappingExecutorUtil.resolve(object2.getPushed(), object2);
|
||||||
|
|
||||||
|
if (base1.getInstruction() instanceof GetFieldInstruction && base2.getInstruction() instanceof GetFieldInstruction)
|
||||||
|
{
|
||||||
|
GetFieldInstruction gf1 = (GetFieldInstruction) base1.getInstruction(),
|
||||||
|
gf2 = (GetFieldInstruction) base2.getInstruction();
|
||||||
|
|
||||||
|
net.runelite.deob.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