Make specific/generic to try and allow changing constants without having to change instructions
This commit is contained in:
@@ -228,4 +228,14 @@ public abstract class Instruction
|
|||||||
public void renameMethod(Method oldMethod, net.runelite.deob.pool.Method newMethod)
|
public void renameMethod(Method oldMethod, net.runelite.deob.pool.Method newMethod)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Instruction makeGeneric()
|
||||||
|
{
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Instruction makeSpecific()
|
||||||
|
{
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -43,8 +43,14 @@ public class Instructions
|
|||||||
{
|
{
|
||||||
Constructor<? extends Instruction> con = type.getInstructionClass().getConstructor(Instructions.class, InstructionType.class, int.class);
|
Constructor<? extends Instruction> con = type.getInstructionClass().getConstructor(Instructions.class, InstructionType.class, int.class);
|
||||||
Instruction ins = con.newInstance(this, type, pc);
|
Instruction ins = con.newInstance(this, type, pc);
|
||||||
|
Instruction genericIns = ins.makeGeneric();
|
||||||
|
|
||||||
instructions.add(ins);
|
if (genericIns != ins)
|
||||||
|
{
|
||||||
|
genericIns.setPc(ins.getPc());
|
||||||
|
}
|
||||||
|
|
||||||
|
instructions.add(genericIns);
|
||||||
|
|
||||||
int len = ins.getLength();
|
int len = ins.getLength();
|
||||||
pc += len;
|
pc += len;
|
||||||
@@ -168,6 +174,16 @@ public class Instructions
|
|||||||
|
|
||||||
public void write(DataOutputStream out) throws IOException
|
public void write(DataOutputStream out) throws IOException
|
||||||
{
|
{
|
||||||
|
// trnaslate instructions to specific
|
||||||
|
for (Instruction i : new ArrayList<>(instructions))
|
||||||
|
{
|
||||||
|
Instruction specific = i.makeSpecific();
|
||||||
|
if (i != specific)
|
||||||
|
{
|
||||||
|
replace(i, specific);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// generate pool indexes
|
// generate pool indexes
|
||||||
for (Instruction i : new ArrayList<>(instructions))
|
for (Instruction i : new ArrayList<>(instructions))
|
||||||
i.prime();
|
i.prime();
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ public class IConst_0 extends Instruction implements PushConstantInstruction
|
|||||||
super(instructions, type, pc);
|
super(instructions, type, pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IConst_0(Instructions instructions)
|
||||||
|
{
|
||||||
|
super(instructions, InstructionType.ICONST_0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(Frame frame)
|
public void execute(Frame frame)
|
||||||
{
|
{
|
||||||
@@ -44,4 +49,10 @@ public class IConst_0 extends Instruction implements PushConstantInstruction
|
|||||||
{
|
{
|
||||||
return new LDC_W(this.getInstructions(), entry);
|
return new LDC_W(this.getInstructions(), entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Instruction makeGeneric()
|
||||||
|
{
|
||||||
|
return new LDC_W(this.getInstructions(), getConstant());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ public class IConst_1 extends Instruction implements PushConstantInstruction
|
|||||||
super(instructions, type, pc);
|
super(instructions, type, pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IConst_1(Instructions instructions)
|
||||||
|
{
|
||||||
|
super(instructions, InstructionType.ICONST_1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(Frame frame)
|
public void execute(Frame frame)
|
||||||
{
|
{
|
||||||
@@ -44,4 +49,10 @@ public class IConst_1 extends Instruction implements PushConstantInstruction
|
|||||||
{
|
{
|
||||||
return new LDC_W(this.getInstructions(), entry);
|
return new LDC_W(this.getInstructions(), entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Instruction makeGeneric()
|
||||||
|
{
|
||||||
|
return new LDC_W(this.getInstructions(), getConstant());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ public class IConst_2 extends Instruction implements PushConstantInstruction
|
|||||||
super(instructions, type, pc);
|
super(instructions, type, pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IConst_2(Instructions instructions)
|
||||||
|
{
|
||||||
|
super(instructions, InstructionType.ICONST_2, 0);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(Frame frame)
|
public void execute(Frame frame)
|
||||||
{
|
{
|
||||||
@@ -44,4 +49,10 @@ public class IConst_2 extends Instruction implements PushConstantInstruction
|
|||||||
{
|
{
|
||||||
return new LDC_W(this.getInstructions(), entry);
|
return new LDC_W(this.getInstructions(), entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Instruction makeGeneric()
|
||||||
|
{
|
||||||
|
return new LDC_W(this.getInstructions(), getConstant());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ public class IConst_3 extends Instruction implements PushConstantInstruction
|
|||||||
super(instructions, type, pc);
|
super(instructions, type, pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IConst_3(Instructions instructions)
|
||||||
|
{
|
||||||
|
super(instructions, InstructionType.ICONST_3, 0);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(Frame frame)
|
public void execute(Frame frame)
|
||||||
{
|
{
|
||||||
@@ -44,4 +49,10 @@ public class IConst_3 extends Instruction implements PushConstantInstruction
|
|||||||
{
|
{
|
||||||
return new LDC_W(this.getInstructions(), entry);
|
return new LDC_W(this.getInstructions(), entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Instruction makeGeneric()
|
||||||
|
{
|
||||||
|
return new LDC_W(this.getInstructions(), getConstant());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ public class IConst_4 extends Instruction implements PushConstantInstruction
|
|||||||
super(instructions, type, pc);
|
super(instructions, type, pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IConst_4(Instructions instructions)
|
||||||
|
{
|
||||||
|
super(instructions, InstructionType.ICONST_4, 0);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(Frame frame)
|
public void execute(Frame frame)
|
||||||
{
|
{
|
||||||
@@ -44,4 +49,10 @@ public class IConst_4 extends Instruction implements PushConstantInstruction
|
|||||||
{
|
{
|
||||||
return new LDC_W(this.getInstructions(), entry);
|
return new LDC_W(this.getInstructions(), entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Instruction makeGeneric()
|
||||||
|
{
|
||||||
|
return new LDC_W(this.getInstructions(), getConstant());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ public class IConst_5 extends Instruction implements PushConstantInstruction
|
|||||||
super(instructions, type, pc);
|
super(instructions, type, pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IConst_5(Instructions instructions)
|
||||||
|
{
|
||||||
|
super(instructions, InstructionType.ICONST_5, 0);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(Frame frame)
|
public void execute(Frame frame)
|
||||||
{
|
{
|
||||||
@@ -44,4 +49,10 @@ public class IConst_5 extends Instruction implements PushConstantInstruction
|
|||||||
{
|
{
|
||||||
return new LDC_W(this.getInstructions(), entry);
|
return new LDC_W(this.getInstructions(), entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Instruction makeGeneric()
|
||||||
|
{
|
||||||
|
return new LDC_W(this.getInstructions(), getConstant());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -19,6 +19,11 @@ public class IConst_M1 extends Instruction implements PushConstantInstruction
|
|||||||
super(instructions, type, pc);
|
super(instructions, type, pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IConst_M1(Instructions instructions)
|
||||||
|
{
|
||||||
|
super(instructions, InstructionType.ICONST_M1, 0);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void execute(Frame frame)
|
public void execute(Frame frame)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -110,4 +110,35 @@ public class LDC_W extends Instruction implements PushConstantInstruction
|
|||||||
value = entry;
|
value = entry;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Instruction makeSpecific()
|
||||||
|
{
|
||||||
|
switch (value.getType())
|
||||||
|
{
|
||||||
|
case INTEGER:
|
||||||
|
{
|
||||||
|
int i = (int) value.getObject();
|
||||||
|
switch (i)
|
||||||
|
{
|
||||||
|
case -1:
|
||||||
|
return new IConst_M1(this.getInstructions());
|
||||||
|
case 0:
|
||||||
|
return new IConst_0(this.getInstructions());
|
||||||
|
case 1:
|
||||||
|
return new IConst_1(this.getInstructions());
|
||||||
|
case 2:
|
||||||
|
return new IConst_2(this.getInstructions());
|
||||||
|
case 3:
|
||||||
|
return new IConst_3(this.getInstructions());
|
||||||
|
case 4:
|
||||||
|
return new IConst_4(this.getInstructions());
|
||||||
|
case 5:
|
||||||
|
return new IConst_5(this.getInstructions());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.makeSpecific();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user