Most other instructions except for function calls and locking
This commit is contained in:
@@ -50,14 +50,14 @@ public enum InstructionType
|
|||||||
ALOAD_1(0x2b, "aload_1", ALoad_1.class),
|
ALOAD_1(0x2b, "aload_1", ALoad_1.class),
|
||||||
ALOAD_2(0x2c, "aload_2", ALoad_2.class),
|
ALOAD_2(0x2c, "aload_2", ALoad_2.class),
|
||||||
ALOAD_3(0x2d, "aload_3", ALoad_3.class),
|
ALOAD_3(0x2d, "aload_3", ALoad_3.class),
|
||||||
IALOAD(0x2e, "iaload", Instruction.class),
|
IALOAD(0x2e, "iaload", IALoad.class),
|
||||||
LALOAD(0x2f, "laload", Instruction.class),
|
LALOAD(0x2f, "laload", LALoad.class),
|
||||||
FALOAD(0x30, "faload", Instruction.class),
|
FALOAD(0x30, "faload", FALoad.class),
|
||||||
DALOAD(0x31, "daload", Instruction.class),
|
DALOAD(0x31, "daload", DALoad.class),
|
||||||
AALOAD(0x32, "aaload", Instruction.class),
|
AALOAD(0x32, "aaload", AALoad.class),
|
||||||
BALOAD(0x33, "baload", Instruction.class),
|
BALOAD(0x33, "baload", BALoad.class),
|
||||||
CALOAD(0x34, "caload", Instruction.class),
|
CALOAD(0x34, "caload", CALoad.class),
|
||||||
SALOAD(0x35, "saload", Instruction.class),
|
SALOAD(0x35, "saload", SALoad.class),
|
||||||
ISTORE(0x36, "istore", IStore.class),
|
ISTORE(0x36, "istore", IStore.class),
|
||||||
LSTORE(0x37, "lstore", LStore.class),
|
LSTORE(0x37, "lstore", LStore.class),
|
||||||
FSTORE(0x38, "fstore", FStore.class),
|
FSTORE(0x38, "fstore", FStore.class),
|
||||||
@@ -83,14 +83,14 @@ public enum InstructionType
|
|||||||
ASTORE_1(0x4c, "astore_1", AStore_1.class),
|
ASTORE_1(0x4c, "astore_1", AStore_1.class),
|
||||||
ASTORE_2(0x4d, "astore_2", AStore_2.class),
|
ASTORE_2(0x4d, "astore_2", AStore_2.class),
|
||||||
ASTORE_3(0x4e, "astore_3", AStore_3.class),
|
ASTORE_3(0x4e, "astore_3", AStore_3.class),
|
||||||
IASTORE(0x4f, "iastore", Instruction.class),
|
IASTORE(0x4f, "iastore", IAStore.class),
|
||||||
LASTORE(0x50, "lastore", Instruction.class),
|
LASTORE(0x50, "lastore", LAStore.class),
|
||||||
FASTORE(0x51, "fastore", Instruction.class),
|
FASTORE(0x51, "fastore", FAStore.class),
|
||||||
DASTORE(0x52, "dastore", Instruction.class),
|
DASTORE(0x52, "dastore", DAStore.class),
|
||||||
AASTORE(0x53, "aastore", Instruction.class),
|
AASTORE(0x53, "aastore", AAStore.class),
|
||||||
BASTORE(0x54, "bastore", Instruction.class),
|
BASTORE(0x54, "bastore", BAStore.class),
|
||||||
CASTORE(0x55, "castore", Instruction.class),
|
CASTORE(0x55, "castore", CAStore.class),
|
||||||
SASTORE(0x56, "sastore", Instruction.class),
|
SASTORE(0x56, "sastore", SAStore.class),
|
||||||
POP(0x57, "pop", Pop.class),
|
POP(0x57, "pop", Pop.class),
|
||||||
POP2(0x58, "pop2", Pop2.class),
|
POP2(0x58, "pop2", Pop2.class),
|
||||||
DUP(0x59, "dup", Dup.class),
|
DUP(0x59, "dup", Dup.class),
|
||||||
@@ -194,7 +194,7 @@ public enum InstructionType
|
|||||||
NEW(0xbb, "new", New.class),
|
NEW(0xbb, "new", New.class),
|
||||||
NEWARRAY(0xbc, "newarray", NewArray.class),
|
NEWARRAY(0xbc, "newarray", NewArray.class),
|
||||||
ANEWARRAY(0xbd, "anewarray", ANewArray.class),
|
ANEWARRAY(0xbd, "anewarray", ANewArray.class),
|
||||||
ARRAYLENGTH(0xbe, "arraylength", Instruction.class),
|
ARRAYLENGTH(0xbe, "arraylength", ArrayLength.class),
|
||||||
ATHROW(0xbf, "athrow", Instruction.class),
|
ATHROW(0xbf, "athrow", Instruction.class),
|
||||||
CHECKCAST(0xc0, "checkcast", CheckCast.class),
|
CHECKCAST(0xc0, "checkcast", CheckCast.class),
|
||||||
INSTANCEOf(0xc1, "instanceof", InstanceOf.class),
|
INSTANCEOf(0xc1, "instanceof", InstanceOf.class),
|
||||||
@@ -205,8 +205,7 @@ public enum InstructionType
|
|||||||
IFNULL(0xc6, "ifnull", IfNull.class),
|
IFNULL(0xc6, "ifnull", IfNull.class),
|
||||||
IFNONNULL(0xc7, "ifnonnull", IfNonNull.class),
|
IFNONNULL(0xc7, "ifnonnull", IfNonNull.class),
|
||||||
GOTO_W(0xc8, "goto_w", GotoW.class),
|
GOTO_W(0xc8, "goto_w", GotoW.class),
|
||||||
JSR_W(0xc9, "jsr_w", JSR_W.class),
|
JSR_W(0xc9, "jsr_w", JSR_W.class);
|
||||||
BREAKPOINT(0xca, "breakpoint", Instruction.class);
|
|
||||||
|
|
||||||
private byte code;
|
private byte code;
|
||||||
private String name;
|
private String name;
|
||||||
|
|||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package info.sigterm.deob.attributes.code.instructions;
|
||||||
|
|
||||||
|
import info.sigterm.deob.attributes.code.Instruction;
|
||||||
|
import info.sigterm.deob.attributes.code.InstructionType;
|
||||||
|
import info.sigterm.deob.attributes.code.Instructions;
|
||||||
|
import info.sigterm.deob.execution.Frame;
|
||||||
|
import info.sigterm.deob.execution.Stack;
|
||||||
|
|
||||||
|
public class AALoad extends Instruction
|
||||||
|
{
|
||||||
|
public AALoad(Instructions instructions, InstructionType type, int pc)
|
||||||
|
{
|
||||||
|
super(instructions, type, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Frame frame)
|
||||||
|
{
|
||||||
|
Stack stack = frame.getStack();
|
||||||
|
|
||||||
|
int index = (int) stack.pop();
|
||||||
|
Object[] array = (Object[]) stack.pop();
|
||||||
|
|
||||||
|
stack.push(array[index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package info.sigterm.deob.attributes.code.instructions;
|
||||||
|
|
||||||
|
import info.sigterm.deob.attributes.code.Instruction;
|
||||||
|
import info.sigterm.deob.attributes.code.InstructionType;
|
||||||
|
import info.sigterm.deob.attributes.code.Instructions;
|
||||||
|
import info.sigterm.deob.execution.Frame;
|
||||||
|
import info.sigterm.deob.execution.Stack;
|
||||||
|
|
||||||
|
public class AAStore extends Instruction
|
||||||
|
{
|
||||||
|
public AAStore(Instructions instructions, InstructionType type, int pc)
|
||||||
|
{
|
||||||
|
super(instructions, type, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Frame frame)
|
||||||
|
{
|
||||||
|
Stack stack = frame.getStack();
|
||||||
|
|
||||||
|
Object value = stack.pop();
|
||||||
|
int index = (int) stack.pop();
|
||||||
|
Object[] array = (Object[]) stack.pop();
|
||||||
|
|
||||||
|
array[index] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
package info.sigterm.deob.attributes.code.instructions;
|
||||||
|
|
||||||
|
import info.sigterm.deob.attributes.code.Instruction;
|
||||||
|
import info.sigterm.deob.attributes.code.InstructionType;
|
||||||
|
import info.sigterm.deob.attributes.code.Instructions;
|
||||||
|
import info.sigterm.deob.execution.Frame;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
|
||||||
|
public class ArrayLength extends Instruction
|
||||||
|
{
|
||||||
|
public ArrayLength(Instructions instructions, InstructionType type, int pc) throws IOException
|
||||||
|
{
|
||||||
|
super(instructions, type, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Frame frame)
|
||||||
|
{
|
||||||
|
Object[] array = (Object[]) frame.getStack().pop();
|
||||||
|
frame.getStack().push(array.length);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package info.sigterm.deob.attributes.code.instructions;
|
||||||
|
|
||||||
|
import info.sigterm.deob.attributes.code.Instruction;
|
||||||
|
import info.sigterm.deob.attributes.code.InstructionType;
|
||||||
|
import info.sigterm.deob.attributes.code.Instructions;
|
||||||
|
import info.sigterm.deob.execution.Frame;
|
||||||
|
import info.sigterm.deob.execution.Stack;
|
||||||
|
|
||||||
|
public class BALoad extends Instruction
|
||||||
|
{
|
||||||
|
public BALoad(Instructions instructions, InstructionType type, int pc)
|
||||||
|
{
|
||||||
|
super(instructions, type, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Frame frame)
|
||||||
|
{
|
||||||
|
Stack stack = frame.getStack();
|
||||||
|
|
||||||
|
int index = (int) stack.pop();
|
||||||
|
boolean[] array = (boolean[]) stack.pop();
|
||||||
|
|
||||||
|
stack.push(array[index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package info.sigterm.deob.attributes.code.instructions;
|
||||||
|
|
||||||
|
import info.sigterm.deob.attributes.code.Instruction;
|
||||||
|
import info.sigterm.deob.attributes.code.InstructionType;
|
||||||
|
import info.sigterm.deob.attributes.code.Instructions;
|
||||||
|
import info.sigterm.deob.execution.Frame;
|
||||||
|
import info.sigterm.deob.execution.Stack;
|
||||||
|
|
||||||
|
public class BAStore extends Instruction
|
||||||
|
{
|
||||||
|
public BAStore(Instructions instructions, InstructionType type, int pc)
|
||||||
|
{
|
||||||
|
super(instructions, type, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Frame frame)
|
||||||
|
{
|
||||||
|
Stack stack = frame.getStack();
|
||||||
|
|
||||||
|
boolean value = (boolean) stack.pop();
|
||||||
|
int index = (int) stack.pop();
|
||||||
|
boolean[] array = (boolean[]) stack.pop();
|
||||||
|
|
||||||
|
array[index] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package info.sigterm.deob.attributes.code.instructions;
|
||||||
|
|
||||||
|
import info.sigterm.deob.attributes.code.Instruction;
|
||||||
|
import info.sigterm.deob.attributes.code.InstructionType;
|
||||||
|
import info.sigterm.deob.attributes.code.Instructions;
|
||||||
|
import info.sigterm.deob.execution.Frame;
|
||||||
|
import info.sigterm.deob.execution.Stack;
|
||||||
|
|
||||||
|
public class CALoad extends Instruction
|
||||||
|
{
|
||||||
|
public CALoad(Instructions instructions, InstructionType type, int pc)
|
||||||
|
{
|
||||||
|
super(instructions, type, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Frame frame)
|
||||||
|
{
|
||||||
|
Stack stack = frame.getStack();
|
||||||
|
|
||||||
|
int index = (int) stack.pop();
|
||||||
|
char[] array = (char[]) stack.pop();
|
||||||
|
|
||||||
|
stack.push(array[index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package info.sigterm.deob.attributes.code.instructions;
|
||||||
|
|
||||||
|
import info.sigterm.deob.attributes.code.Instruction;
|
||||||
|
import info.sigterm.deob.attributes.code.InstructionType;
|
||||||
|
import info.sigterm.deob.attributes.code.Instructions;
|
||||||
|
import info.sigterm.deob.execution.Frame;
|
||||||
|
import info.sigterm.deob.execution.Stack;
|
||||||
|
|
||||||
|
public class CAStore extends Instruction
|
||||||
|
{
|
||||||
|
public CAStore(Instructions instructions, InstructionType type, int pc)
|
||||||
|
{
|
||||||
|
super(instructions, type, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Frame frame)
|
||||||
|
{
|
||||||
|
Stack stack = frame.getStack();
|
||||||
|
|
||||||
|
char value = (char) stack.pop();
|
||||||
|
int index = (int) stack.pop();
|
||||||
|
char[] array = (char[]) stack.pop();
|
||||||
|
|
||||||
|
array[index] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package info.sigterm.deob.attributes.code.instructions;
|
||||||
|
|
||||||
|
import info.sigterm.deob.attributes.code.Instruction;
|
||||||
|
import info.sigterm.deob.attributes.code.InstructionType;
|
||||||
|
import info.sigterm.deob.attributes.code.Instructions;
|
||||||
|
import info.sigterm.deob.execution.Frame;
|
||||||
|
import info.sigterm.deob.execution.Stack;
|
||||||
|
|
||||||
|
public class DALoad extends Instruction
|
||||||
|
{
|
||||||
|
public DALoad(Instructions instructions, InstructionType type, int pc)
|
||||||
|
{
|
||||||
|
super(instructions, type, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Frame frame)
|
||||||
|
{
|
||||||
|
Stack stack = frame.getStack();
|
||||||
|
|
||||||
|
int index = (int) stack.pop();
|
||||||
|
double[] array = (double[]) stack.pop();
|
||||||
|
|
||||||
|
stack.push(array[index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package info.sigterm.deob.attributes.code.instructions;
|
||||||
|
|
||||||
|
import info.sigterm.deob.attributes.code.Instruction;
|
||||||
|
import info.sigterm.deob.attributes.code.InstructionType;
|
||||||
|
import info.sigterm.deob.attributes.code.Instructions;
|
||||||
|
import info.sigterm.deob.execution.Frame;
|
||||||
|
import info.sigterm.deob.execution.Stack;
|
||||||
|
|
||||||
|
public class DAStore extends Instruction
|
||||||
|
{
|
||||||
|
public DAStore(Instructions instructions, InstructionType type, int pc)
|
||||||
|
{
|
||||||
|
super(instructions, type, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Frame frame)
|
||||||
|
{
|
||||||
|
Stack stack = frame.getStack();
|
||||||
|
|
||||||
|
double value = (double) stack.pop();
|
||||||
|
int index = (int) stack.pop();
|
||||||
|
double[] array = (double[]) stack.pop();
|
||||||
|
|
||||||
|
array[index] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package info.sigterm.deob.attributes.code.instructions;
|
||||||
|
|
||||||
|
import info.sigterm.deob.attributes.code.Instruction;
|
||||||
|
import info.sigterm.deob.attributes.code.InstructionType;
|
||||||
|
import info.sigterm.deob.attributes.code.Instructions;
|
||||||
|
import info.sigterm.deob.execution.Frame;
|
||||||
|
import info.sigterm.deob.execution.Stack;
|
||||||
|
|
||||||
|
public class FALoad extends Instruction
|
||||||
|
{
|
||||||
|
public FALoad(Instructions instructions, InstructionType type, int pc)
|
||||||
|
{
|
||||||
|
super(instructions, type, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Frame frame)
|
||||||
|
{
|
||||||
|
Stack stack = frame.getStack();
|
||||||
|
|
||||||
|
int index = (int) stack.pop();
|
||||||
|
float[] array = (float[]) stack.pop();
|
||||||
|
|
||||||
|
stack.push(array[index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package info.sigterm.deob.attributes.code.instructions;
|
||||||
|
|
||||||
|
import info.sigterm.deob.attributes.code.Instruction;
|
||||||
|
import info.sigterm.deob.attributes.code.InstructionType;
|
||||||
|
import info.sigterm.deob.attributes.code.Instructions;
|
||||||
|
import info.sigterm.deob.execution.Frame;
|
||||||
|
import info.sigterm.deob.execution.Stack;
|
||||||
|
|
||||||
|
public class FAStore extends Instruction
|
||||||
|
{
|
||||||
|
public FAStore(Instructions instructions, InstructionType type, int pc)
|
||||||
|
{
|
||||||
|
super(instructions, type, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Frame frame)
|
||||||
|
{
|
||||||
|
Stack stack = frame.getStack();
|
||||||
|
|
||||||
|
float value = (float) stack.pop();
|
||||||
|
int index = (int) stack.pop();
|
||||||
|
float[] array = (float[]) stack.pop();
|
||||||
|
|
||||||
|
array[index] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package info.sigterm.deob.attributes.code.instructions;
|
||||||
|
|
||||||
|
import info.sigterm.deob.attributes.code.Instruction;
|
||||||
|
import info.sigterm.deob.attributes.code.InstructionType;
|
||||||
|
import info.sigterm.deob.attributes.code.Instructions;
|
||||||
|
import info.sigterm.deob.execution.Frame;
|
||||||
|
import info.sigterm.deob.execution.Stack;
|
||||||
|
|
||||||
|
public class IALoad extends Instruction
|
||||||
|
{
|
||||||
|
public IALoad(Instructions instructions, InstructionType type, int pc)
|
||||||
|
{
|
||||||
|
super(instructions, type, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Frame frame)
|
||||||
|
{
|
||||||
|
Stack stack = frame.getStack();
|
||||||
|
|
||||||
|
int index = (int) stack.pop();
|
||||||
|
int[] array = (int[]) stack.pop();
|
||||||
|
|
||||||
|
stack.push(array[index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package info.sigterm.deob.attributes.code.instructions;
|
||||||
|
|
||||||
|
import info.sigterm.deob.attributes.code.Instruction;
|
||||||
|
import info.sigterm.deob.attributes.code.InstructionType;
|
||||||
|
import info.sigterm.deob.attributes.code.Instructions;
|
||||||
|
import info.sigterm.deob.execution.Frame;
|
||||||
|
import info.sigterm.deob.execution.Stack;
|
||||||
|
|
||||||
|
public class IAStore extends Instruction
|
||||||
|
{
|
||||||
|
public IAStore(Instructions instructions, InstructionType type, int pc)
|
||||||
|
{
|
||||||
|
super(instructions, type, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Frame frame)
|
||||||
|
{
|
||||||
|
Stack stack = frame.getStack();
|
||||||
|
|
||||||
|
int value = (int) stack.pop();
|
||||||
|
int index = (int) stack.pop();
|
||||||
|
int[] array = (int[]) stack.pop();
|
||||||
|
|
||||||
|
array[index] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package info.sigterm.deob.attributes.code.instructions;
|
||||||
|
|
||||||
|
import info.sigterm.deob.attributes.code.Instruction;
|
||||||
|
import info.sigterm.deob.attributes.code.InstructionType;
|
||||||
|
import info.sigterm.deob.attributes.code.Instructions;
|
||||||
|
import info.sigterm.deob.execution.Frame;
|
||||||
|
import info.sigterm.deob.execution.Stack;
|
||||||
|
|
||||||
|
public class LALoad extends Instruction
|
||||||
|
{
|
||||||
|
public LALoad(Instructions instructions, InstructionType type, int pc)
|
||||||
|
{
|
||||||
|
super(instructions, type, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Frame frame)
|
||||||
|
{
|
||||||
|
Stack stack = frame.getStack();
|
||||||
|
|
||||||
|
int index = (int) stack.pop();
|
||||||
|
long[] array = (long[]) stack.pop();
|
||||||
|
|
||||||
|
stack.push(array[index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package info.sigterm.deob.attributes.code.instructions;
|
||||||
|
|
||||||
|
import info.sigterm.deob.attributes.code.Instruction;
|
||||||
|
import info.sigterm.deob.attributes.code.InstructionType;
|
||||||
|
import info.sigterm.deob.attributes.code.Instructions;
|
||||||
|
import info.sigterm.deob.execution.Frame;
|
||||||
|
import info.sigterm.deob.execution.Stack;
|
||||||
|
|
||||||
|
public class LAStore extends Instruction
|
||||||
|
{
|
||||||
|
public LAStore(Instructions instructions, InstructionType type, int pc)
|
||||||
|
{
|
||||||
|
super(instructions, type, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Frame frame)
|
||||||
|
{
|
||||||
|
Stack stack = frame.getStack();
|
||||||
|
|
||||||
|
long value = (long) stack.pop();
|
||||||
|
int index = (int) stack.pop();
|
||||||
|
long[] array = (long[]) stack.pop();
|
||||||
|
|
||||||
|
array[index] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
package info.sigterm.deob.attributes.code.instructions;
|
||||||
|
|
||||||
|
import info.sigterm.deob.attributes.code.Instruction;
|
||||||
|
import info.sigterm.deob.attributes.code.InstructionType;
|
||||||
|
import info.sigterm.deob.attributes.code.Instructions;
|
||||||
|
import info.sigterm.deob.execution.Frame;
|
||||||
|
import info.sigterm.deob.execution.Stack;
|
||||||
|
|
||||||
|
public class SALoad extends Instruction
|
||||||
|
{
|
||||||
|
public SALoad(Instructions instructions, InstructionType type, int pc)
|
||||||
|
{
|
||||||
|
super(instructions, type, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Frame frame)
|
||||||
|
{
|
||||||
|
Stack stack = frame.getStack();
|
||||||
|
|
||||||
|
int index = (int) stack.pop();
|
||||||
|
short[] array = (short[]) stack.pop();
|
||||||
|
|
||||||
|
stack.push(array[index]);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
package info.sigterm.deob.attributes.code.instructions;
|
||||||
|
|
||||||
|
import info.sigterm.deob.attributes.code.Instruction;
|
||||||
|
import info.sigterm.deob.attributes.code.InstructionType;
|
||||||
|
import info.sigterm.deob.attributes.code.Instructions;
|
||||||
|
import info.sigterm.deob.execution.Frame;
|
||||||
|
import info.sigterm.deob.execution.Stack;
|
||||||
|
|
||||||
|
public class SAStore extends Instruction
|
||||||
|
{
|
||||||
|
public SAStore(Instructions instructions, InstructionType type, int pc)
|
||||||
|
{
|
||||||
|
super(instructions, type, pc);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void execute(Frame frame)
|
||||||
|
{
|
||||||
|
Stack stack = frame.getStack();
|
||||||
|
|
||||||
|
short value = (short) stack.pop();
|
||||||
|
int index = (int) stack.pop();
|
||||||
|
short[] array = (short[]) stack.pop();
|
||||||
|
|
||||||
|
array[index] = value;
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user