diff --git a/src/main/java/info/sigterm/deob/attributes/Code.java b/src/main/java/info/sigterm/deob/attributes/Code.java
index 680970c247..044d757e90 100644
--- a/src/main/java/info/sigterm/deob/attributes/Code.java
+++ b/src/main/java/info/sigterm/deob/attributes/Code.java
@@ -1,7 +1,9 @@
package info.sigterm.deob.attributes;
import info.sigterm.deob.attributes.code.Exceptions;
+import info.sigterm.deob.attributes.code.Instruction;
import info.sigterm.deob.attributes.code.Instructions;
+import info.sigterm.deob.execution.Frame;
import java.io.DataInputStream;
import java.io.IOException;
@@ -43,4 +45,10 @@ public class Code extends Attribute
{
instructions.buildInstructionGraph();
}
+
+ public void execute(Frame frame)
+ {
+ Instruction i = instructions.getFirstInstruction();
+ i.execute(frame);
+ }
}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/Instruction.java b/src/main/java/info/sigterm/deob/attributes/code/Instruction.java
index edab9b4d0b..5fc098c8dd 100644
--- a/src/main/java/info/sigterm/deob/attributes/code/Instruction.java
+++ b/src/main/java/info/sigterm/deob/attributes/code/Instruction.java
@@ -1,10 +1,10 @@
package info.sigterm.deob.attributes.code;
-import info.sigterm.deob.execution.Execution;
+import info.sigterm.deob.execution.Frame;
import java.util.ArrayList;
-public class Instruction
+public abstract class Instruction
{
private Instructions instructions;
private InstructionType type;
@@ -55,7 +55,6 @@ public class Instruction
{
}
- public void execute(Execution e)
- {
- }
+ //public abstract void execute(Frame e);
+ public void execute(Frame e) { }
}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/InstructionType.java b/src/main/java/info/sigterm/deob/attributes/code/InstructionType.java
index 5f31ce975e..327a473eaf 100644
--- a/src/main/java/info/sigterm/deob/attributes/code/InstructionType.java
+++ b/src/main/java/info/sigterm/deob/attributes/code/InstructionType.java
@@ -1,64 +1,25 @@
package info.sigterm.deob.attributes.code;
-import info.sigterm.deob.attributes.code.instructions.ALoad;
-import info.sigterm.deob.attributes.code.instructions.ANewArray;
-import info.sigterm.deob.attributes.code.instructions.AStore;
-import info.sigterm.deob.attributes.code.instructions.BiPush;
-import info.sigterm.deob.attributes.code.instructions.Branch;
-import info.sigterm.deob.attributes.code.instructions.CheckCast;
-import info.sigterm.deob.attributes.code.instructions.DLoad;
-import info.sigterm.deob.attributes.code.instructions.DStore;
-import info.sigterm.deob.attributes.code.instructions.FLoad;
-import info.sigterm.deob.attributes.code.instructions.FStore;
-import info.sigterm.deob.attributes.code.instructions.GetField;
-import info.sigterm.deob.attributes.code.instructions.GetStatic;
-import info.sigterm.deob.attributes.code.instructions.GotoW;
-import info.sigterm.deob.attributes.code.instructions.IInc;
-import info.sigterm.deob.attributes.code.instructions.ILoad;
-import info.sigterm.deob.attributes.code.instructions.IStore;
-import info.sigterm.deob.attributes.code.instructions.IfNonNull;
-import info.sigterm.deob.attributes.code.instructions.IfNull;
-import info.sigterm.deob.attributes.code.instructions.InstanceOf;
-import info.sigterm.deob.attributes.code.instructions.InvokeDynamic;
-import info.sigterm.deob.attributes.code.instructions.InvokeInterface;
-import info.sigterm.deob.attributes.code.instructions.InvokeSpecial;
-import info.sigterm.deob.attributes.code.instructions.InvokeStatic;
-import info.sigterm.deob.attributes.code.instructions.InvokeVirtual;
-import info.sigterm.deob.attributes.code.instructions.JSR_W;
-import info.sigterm.deob.attributes.code.instructions.LDC;
-import info.sigterm.deob.attributes.code.instructions.LDC2_W;
-import info.sigterm.deob.attributes.code.instructions.LDC_W;
-import info.sigterm.deob.attributes.code.instructions.LLoad;
-import info.sigterm.deob.attributes.code.instructions.LStore;
-import info.sigterm.deob.attributes.code.instructions.LookupSwitch;
-import info.sigterm.deob.attributes.code.instructions.MultiANewArray;
-import info.sigterm.deob.attributes.code.instructions.New;
-import info.sigterm.deob.attributes.code.instructions.NewArray;
-import info.sigterm.deob.attributes.code.instructions.PutField;
-import info.sigterm.deob.attributes.code.instructions.PutStatic;
-import info.sigterm.deob.attributes.code.instructions.Ret;
-import info.sigterm.deob.attributes.code.instructions.SiPush;
-import info.sigterm.deob.attributes.code.instructions.TableSwitch;
-import info.sigterm.deob.attributes.code.instructions.Wide;
+import info.sigterm.deob.attributes.code.instructions.*;
public enum InstructionType
{
- NOP(0x00, "nop", Instruction.class),
- ACONST_NULL(0x01, "aconst_null", Instruction.class),
- ICONST_M1(0x02, "iconst_m1", Instruction.class),
- ICONST_0(0x03, "iconst_0", Instruction.class),
- ICONST_1(0x04, "iconst_1", Instruction.class),
- ICONST_2(0x05, "iconst_2", Instruction.class),
- ICONST_3(0x06, "iconst_3", Instruction.class),
- ICONST_4(0x07, "iconst_4", Instruction.class),
- ICONST_5(0x08, "iconst_5", Instruction.class),
- LCONST_0(0x09, "lconst_0", Instruction.class),
- LCONST_1(0x0a, "lconst_1", Instruction.class),
- FCONST_0(0x0b, "fconst_0", Instruction.class),
- FCONST_1(0x0c, "fconst_1", Instruction.class),
- FCONST_2(0x0d, "fconst_2", Instruction.class),
- DCONST_0(0x0e, "dconst_0", Instruction.class),
- DCONST_1(0x0f, "dconst_1", Instruction.class),
+ NOP(0x00, "nop", NOP.class),
+ ACONST_NULL(0x01, "aconst_null", AConstNull.class),
+ ICONST_M1(0x02, "iconst_m1", IConst_M1.class),
+ ICONST_0(0x03, "iconst_0", IConst_0.class),
+ ICONST_1(0x04, "iconst_1", IConst_1.class),
+ ICONST_2(0x05, "iconst_2", IConst_2.class),
+ ICONST_3(0x06, "iconst_3", IConst_3.class),
+ ICONST_4(0x07, "iconst_4", IConst_4.class),
+ ICONST_5(0x08, "iconst_5", IConst_5.class),
+ LCONST_0(0x09, "lconst_0", LConst_0.class),
+ LCONST_1(0x0a, "lconst_1", LConst_1.class),
+ FCONST_0(0x0b, "fconst_0", FConst_0.class),
+ FCONST_1(0x0c, "fconst_1", FConst_1.class),
+ FCONST_2(0x0d, "fconst_2", FConst_2.class),
+ DCONST_0(0x0e, "dconst_0", DConst_0.class),
+ DCONST_1(0x0f, "dconst_1", DConst_1.class),
BIPUSH(0x10, "bipush", BiPush.class),
SIPUSH(0x11, "sipush", SiPush.class),
LDC(0x12, "ldc", LDC.class),
@@ -69,26 +30,26 @@ public enum InstructionType
FLOAD(0x17, "fload", FLoad.class),
DLOAD(0x18, "dload", DLoad.class),
ALOAD(0x19, "aload", ALoad.class),
- ILOAD_0(0x1a, "iload_0", Instruction.class),
- ILOAD_1(0x1b, "iload_1", Instruction.class),
- ILOAD_2(0x1c, "iload_2", Instruction.class),
- ILOAD_3(0x1d, "iload_3", Instruction.class),
- LLOAD_0(0x1e, "lload_0", Instruction.class),
- LLOAD_1(0x1f, "lload_1", Instruction.class),
- LLOAD_2(0x20, "lload_2", Instruction.class),
- LLOAD_3(0x21, "lload_3", Instruction.class),
- FLOAD_0(0x22, "fload_0", Instruction.class),
- FLOAD_1(0x23, "fload_1", Instruction.class),
- FLOAD_2(0x24, "fload_2", Instruction.class),
- FLOAD_3(0x25, "fload_3", Instruction.class),
- DLOAD_0(0x26, "dload_0", Instruction.class),
- DLOAD_1(0x27, "dload_1", Instruction.class),
- DLOAD_2(0x28, "dload_2", Instruction.class),
- DLOAD_3(0x29, "dload_3", Instruction.class),
- ALOAD_0(0x2a, "aload_0", Instruction.class),
- ALOAD_1(0x2b, "aload_1", Instruction.class),
- ALOAD_2(0x2c, "aload_2", Instruction.class),
- ALOAD_3(0x2d, "aload_3", Instruction.class),
+ ILOAD_0(0x1a, "iload_0", ILoad_0.class),
+ ILOAD_1(0x1b, "iload_1", ILoad_1.class),
+ ILOAD_2(0x1c, "iload_2", ILoad_2.class),
+ ILOAD_3(0x1d, "iload_3", ILoad_3.class),
+ LLOAD_0(0x1e, "lload_0", LLoad_0.class),
+ LLOAD_1(0x1f, "lload_1", LLoad_1.class),
+ LLOAD_2(0x20, "lload_2", LLoad_2.class),
+ LLOAD_3(0x21, "lload_3", LLoad_3.class),
+ FLOAD_0(0x22, "fload_0", FLoad_0.class),
+ FLOAD_1(0x23, "fload_1", FLoad_1.class),
+ FLOAD_2(0x24, "fload_2", FLoad_2.class),
+ FLOAD_3(0x25, "fload_3", FLoad_3.class),
+ DLOAD_0(0x26, "dload_0", DLoad_0.class),
+ DLOAD_1(0x27, "dload_1", DLoad_1.class),
+ DLOAD_2(0x28, "dload_2", DLoad_2.class),
+ DLOAD_3(0x29, "dload_3", DLoad_3.class),
+ ALOAD_0(0x2a, "aload_0", ALoad_0.class),
+ ALOAD_1(0x2b, "aload_1", ALoad_1.class),
+ ALOAD_2(0x2c, "aload_2", ALoad_2.class),
+ ALOAD_3(0x2d, "aload_3", ALoad_3.class),
IALOAD(0x2e, "iaload", Instruction.class),
LALOAD(0x2f, "laload", Instruction.class),
FALOAD(0x30, "faload", Instruction.class),
@@ -102,26 +63,26 @@ public enum InstructionType
FSTORE(0x38, "fstore", FStore.class),
DSTORE(0x39, "dstore", DStore.class),
ASTORE(0x3a, "astore", AStore.class),
- ISTORE_0(0x3b, "istore_0", Instruction.class),
- ISTORE_1(0x3c, "istore_1", Instruction.class),
- ISTORE_2(0x3d, "istore_2", Instruction.class),
- ISTORE_3(0x3e, "istore_3", Instruction.class),
- LSTORE_0(0x3f, "lstore_0", Instruction.class),
- LSTORE_1(0x40, "lstore_1", Instruction.class),
- LSTORE_2(0x41, "lstore_2", Instruction.class),
- LSTORE_3(0x42, "lstore_3", Instruction.class),
- FSTORE_0(0x43, "fstore_0", Instruction.class),
- FSTORE_1(0x44, "fstore_1", Instruction.class),
- FSTORE_2(0x45, "fstore_2", Instruction.class),
- FSTORE_3(0x46, "fstore_3", Instruction.class),
- DST0RE_0(0x47, "dstore_0", Instruction.class),
- DSTORE_1(0x48, "dstore_1", Instruction.class),
- DSTORE_2(0x49, "dstore_2", Instruction.class),
- DSTORE_3(0x4a, "dstore_3", Instruction.class),
- ASTORE_0(0x4b, "astore_0", Instruction.class),
- ASTORE_1(0x4c, "astore_1", Instruction.class),
- ASTORE_2(0x4d, "astore_2", Instruction.class),
- ASTORE_3(0x4e, "astore_3", Instruction.class),
+ ISTORE_0(0x3b, "istore_0", IStore_0.class),
+ ISTORE_1(0x3c, "istore_1", IStore_1.class),
+ ISTORE_2(0x3d, "istore_2", IStore_2.class),
+ ISTORE_3(0x3e, "istore_3", IStore_3.class),
+ LSTORE_0(0x3f, "lstore_0", LStore_0.class),
+ LSTORE_1(0x40, "lstore_1", LStore_1.class),
+ LSTORE_2(0x41, "lstore_2", LStore_2.class),
+ LSTORE_3(0x42, "lstore_3", LStore_3.class),
+ FSTORE_0(0x43, "fstore_0", FStore_0.class),
+ FSTORE_1(0x44, "fstore_1", FStore_1.class),
+ FSTORE_2(0x45, "fstore_2", FStore_2.class),
+ FSTORE_3(0x46, "fstore_3", FStore_3.class),
+ DST0RE_0(0x47, "dstore_0", DStore_0.class),
+ DSTORE_1(0x48, "dstore_1", DStore_1.class),
+ DSTORE_2(0x49, "dstore_2", DStore_2.class),
+ DSTORE_3(0x4a, "dstore_3", DStore_3.class),
+ ASTORE_0(0x4b, "astore_0", AStore_0.class),
+ ASTORE_1(0x4c, "astore_1", AStore_1.class),
+ ASTORE_2(0x4d, "astore_2", AStore_2.class),
+ ASTORE_3(0x4e, "astore_3", AStore_3.class),
IASTORE(0x4f, "iastore", Instruction.class),
LASTORE(0x50, "lastore", Instruction.class),
FASTORE(0x51, "fastore", Instruction.class),
@@ -130,8 +91,8 @@ public enum InstructionType
BASTORE(0x54, "bastore", Instruction.class),
CASTORE(0x55, "castore", Instruction.class),
SASTORE(0x56, "sastore", Instruction.class),
- POP(0x57, "pop", Instruction.class),
- POP2(0x58, "pop2", Instruction.class),
+ POP(0x57, "pop", Pop.class),
+ POP2(0x58, "pop2", Pop2.class),
DUP(0x59, "dup", Instruction.class),
DUP_X1(0x5a, "dup_x1", Instruction.class),
DUP_X2(0x5b, "dup_x2", Instruction.class),
@@ -147,7 +108,7 @@ public enum InstructionType
LSUB(0x65, "lsub", Instruction.class),
FSUB(0x66, "fsub", Instruction.class),
DSUB(0x67, "dsub", Instruction.class),
- IMUL(0x68, "imul", Instruction.class),
+ IMUL(0x68, "imul", IMul.class),
LMUL(0x69, "lmul", Instruction.class),
FMUL(0x6a, "fmul", Instruction.class),
DMUL(0x6b, "dmul", Instruction.class),
diff --git a/src/main/java/info/sigterm/deob/attributes/code/Instructions.java b/src/main/java/info/sigterm/deob/attributes/code/Instructions.java
index 3773dce834..41c82468ef 100644
--- a/src/main/java/info/sigterm/deob/attributes/code/Instructions.java
+++ b/src/main/java/info/sigterm/deob/attributes/code/Instructions.java
@@ -64,6 +64,11 @@ public class Instructions
return code;
}
+ public Instruction getFirstInstruction()
+ {
+ return instructions.get(0);
+ }
+
public Instruction findInstruction(int pc)
{
for (Instruction i : instructions)
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/AConstNull.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/AConstNull.java
new file mode 100644
index 0000000000..6dd3ad7919
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/AConstNull.java
@@ -0,0 +1,24 @@
+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;
+
+import java.io.IOException;
+
+public class AConstNull extends Instruction
+{
+ public AConstNull(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Stack stack = frame.getStack();
+ stack.push(null);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/ALoad_0.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/ALoad_0.java
new file mode 100644
index 0000000000..402281f388
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/ALoad_0.java
@@ -0,0 +1,24 @@
+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 ALoad_0 extends Instruction
+{
+ public ALoad_0(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(0);
+ assert obj != null;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/ALoad_1.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/ALoad_1.java
new file mode 100644
index 0000000000..13035d91fa
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/ALoad_1.java
@@ -0,0 +1,24 @@
+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 ALoad_1 extends Instruction
+{
+ public ALoad_1(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(1);
+ assert obj != null;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/ALoad_2.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/ALoad_2.java
new file mode 100644
index 0000000000..ea78d1df55
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/ALoad_2.java
@@ -0,0 +1,24 @@
+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 ALoad_2 extends Instruction
+{
+ public ALoad_2(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(2);
+ assert obj != null;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/ALoad_3.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/ALoad_3.java
new file mode 100644
index 0000000000..fe87fcef9e
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/ALoad_3.java
@@ -0,0 +1,24 @@
+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 ALoad_3 extends Instruction
+{
+ public ALoad_3(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(3);
+ assert obj != null;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/AStore.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/AStore.java
index 74b5ffd344..6398a2f66b 100644
--- a/src/main/java/info/sigterm/deob/attributes/code/instructions/AStore.java
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/AStore.java
@@ -3,6 +3,7 @@ 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.DataInputStream;
import java.io.IOException;
@@ -20,4 +21,11 @@ public class AStore extends Instruction
length += 1;
}
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj != null;
+ frame.getVariables().set(index, obj);
+ }
}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/AStore_0.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/AStore_0.java
new file mode 100644
index 0000000000..96c1349ec0
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/AStore_0.java
@@ -0,0 +1,24 @@
+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 AStore_0 extends Instruction
+{
+ public AStore_0(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj != null;
+ frame.getVariables().set(0, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/AStore_1.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/AStore_1.java
new file mode 100644
index 0000000000..f6765778ec
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/AStore_1.java
@@ -0,0 +1,24 @@
+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 AStore_1 extends Instruction
+{
+ public AStore_1(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj != null;
+ frame.getVariables().set(1, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/AStore_2.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/AStore_2.java
new file mode 100644
index 0000000000..4af29a6cdd
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/AStore_2.java
@@ -0,0 +1,24 @@
+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 AStore_2 extends Instruction
+{
+ public AStore_2(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj != null;
+ frame.getVariables().set(2, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/AStore_3.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/AStore_3.java
new file mode 100644
index 0000000000..f3eb1c7854
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/AStore_3.java
@@ -0,0 +1,24 @@
+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 AStore_3 extends Instruction
+{
+ public AStore_3(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj != null;
+ frame.getVariables().set(3, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/DConst_0.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/DConst_0.java
new file mode 100644
index 0000000000..122dbd2836
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/DConst_0.java
@@ -0,0 +1,24 @@
+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;
+
+import java.io.IOException;
+
+public class DConst_0 extends Instruction
+{
+ public DConst_0(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Stack stack = frame.getStack();
+ stack.push(0d);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/DConst_1.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/DConst_1.java
new file mode 100644
index 0000000000..b06ed70e74
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/DConst_1.java
@@ -0,0 +1,24 @@
+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;
+
+import java.io.IOException;
+
+public class DConst_1 extends Instruction
+{
+ public DConst_1(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Stack stack = frame.getStack();
+ stack.push(1d);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/DLoad_0.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/DLoad_0.java
new file mode 100644
index 0000000000..cc6cd27e3e
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/DLoad_0.java
@@ -0,0 +1,24 @@
+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 DLoad_0 extends Instruction
+{
+ public DLoad_0(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(0);
+ assert obj instanceof Double;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/DLoad_1.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/DLoad_1.java
new file mode 100644
index 0000000000..97f703532a
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/DLoad_1.java
@@ -0,0 +1,24 @@
+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 DLoad_1 extends Instruction
+{
+ public DLoad_1(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(1);
+ assert obj instanceof Double;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/DLoad_2.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/DLoad_2.java
new file mode 100644
index 0000000000..b29a5b6f00
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/DLoad_2.java
@@ -0,0 +1,24 @@
+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 DLoad_2 extends Instruction
+{
+ public DLoad_2(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(2);
+ assert obj instanceof Double;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/DLoad_3.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/DLoad_3.java
new file mode 100644
index 0000000000..250d8bd09b
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/DLoad_3.java
@@ -0,0 +1,24 @@
+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 DLoad_3 extends Instruction
+{
+ public DLoad_3(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(3);
+ assert obj instanceof Double;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/DStore_0.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/DStore_0.java
new file mode 100644
index 0000000000..c662cf9347
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/DStore_0.java
@@ -0,0 +1,24 @@
+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 DStore_0 extends Instruction
+{
+ public DStore_0(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj instanceof Double;
+ frame.getVariables().set(0, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/DStore_1.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/DStore_1.java
new file mode 100644
index 0000000000..caabdf9bc6
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/DStore_1.java
@@ -0,0 +1,24 @@
+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 DStore_1 extends Instruction
+{
+ public DStore_1(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj instanceof Double;
+ frame.getVariables().set(1, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/DStore_2.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/DStore_2.java
new file mode 100644
index 0000000000..e409823d12
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/DStore_2.java
@@ -0,0 +1,24 @@
+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 DStore_2 extends Instruction
+{
+ public DStore_2(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj instanceof Double;
+ frame.getVariables().set(2, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/DStore_3.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/DStore_3.java
new file mode 100644
index 0000000000..bd229b6b47
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/DStore_3.java
@@ -0,0 +1,24 @@
+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 DStore_3 extends Instruction
+{
+ public DStore_3(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj instanceof Double;
+ frame.getVariables().set(3, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/FConst_0.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/FConst_0.java
new file mode 100644
index 0000000000..eac08c898c
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/FConst_0.java
@@ -0,0 +1,24 @@
+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;
+
+import java.io.IOException;
+
+public class FConst_0 extends Instruction
+{
+ public FConst_0(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Stack stack = frame.getStack();
+ stack.push(0f);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/FConst_1.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/FConst_1.java
new file mode 100644
index 0000000000..cd6b70416f
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/FConst_1.java
@@ -0,0 +1,24 @@
+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;
+
+import java.io.IOException;
+
+public class FConst_1 extends Instruction
+{
+ public FConst_1(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Stack stack = frame.getStack();
+ stack.push(1f);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/FConst_2.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/FConst_2.java
new file mode 100644
index 0000000000..fbf1a4429e
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/FConst_2.java
@@ -0,0 +1,24 @@
+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;
+
+import java.io.IOException;
+
+public class FConst_2 extends Instruction
+{
+ public FConst_2(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Stack stack = frame.getStack();
+ stack.push(2f);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/FLoad_0.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/FLoad_0.java
new file mode 100644
index 0000000000..4b527864df
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/FLoad_0.java
@@ -0,0 +1,24 @@
+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 FLoad_0 extends Instruction
+{
+ public FLoad_0(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(0);
+ assert obj instanceof Float;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/FLoad_1.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/FLoad_1.java
new file mode 100644
index 0000000000..522a664b3e
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/FLoad_1.java
@@ -0,0 +1,24 @@
+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 FLoad_1 extends Instruction
+{
+ public FLoad_1(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(1);
+ assert obj instanceof Float;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/FLoad_2.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/FLoad_2.java
new file mode 100644
index 0000000000..bd2488fb15
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/FLoad_2.java
@@ -0,0 +1,24 @@
+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 FLoad_2 extends Instruction
+{
+ public FLoad_2(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(2);
+ assert obj instanceof Float;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/FLoad_3.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/FLoad_3.java
new file mode 100644
index 0000000000..7f790f2bad
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/FLoad_3.java
@@ -0,0 +1,24 @@
+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 FLoad_3 extends Instruction
+{
+ public FLoad_3(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(3);
+ assert obj instanceof Float;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/FStore_0.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/FStore_0.java
new file mode 100644
index 0000000000..a6a0e26701
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/FStore_0.java
@@ -0,0 +1,24 @@
+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 FStore_0 extends Instruction
+{
+ public FStore_0(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj instanceof Float;
+ frame.getVariables().set(0, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/FStore_1.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/FStore_1.java
new file mode 100644
index 0000000000..47635838f5
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/FStore_1.java
@@ -0,0 +1,24 @@
+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 FStore_1 extends Instruction
+{
+ public FStore_1(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj instanceof Float;
+ frame.getVariables().set(1, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/FStore_2.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/FStore_2.java
new file mode 100644
index 0000000000..f77a7440c4
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/FStore_2.java
@@ -0,0 +1,24 @@
+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 FStore_2 extends Instruction
+{
+ public FStore_2(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj instanceof Float;
+ frame.getVariables().set(2, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/FStore_3.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/FStore_3.java
new file mode 100644
index 0000000000..718c9722d9
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/FStore_3.java
@@ -0,0 +1,24 @@
+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 FStore_3 extends Instruction
+{
+ public FStore_3(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj instanceof Float;
+ frame.getVariables().set(3, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_0.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_0.java
new file mode 100644
index 0000000000..c4b45af100
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_0.java
@@ -0,0 +1,24 @@
+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;
+
+import java.io.IOException;
+
+public class IConst_0 extends Instruction
+{
+ public IConst_0(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Stack stack = frame.getStack();
+ stack.push(0);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_1.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_1.java
new file mode 100644
index 0000000000..2730c61aff
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_1.java
@@ -0,0 +1,24 @@
+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;
+
+import java.io.IOException;
+
+public class IConst_1 extends Instruction
+{
+ public IConst_1(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Stack stack = frame.getStack();
+ stack.push(1);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_2.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_2.java
new file mode 100644
index 0000000000..2f7a917784
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_2.java
@@ -0,0 +1,24 @@
+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;
+
+import java.io.IOException;
+
+public class IConst_2 extends Instruction
+{
+ public IConst_2(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Stack stack = frame.getStack();
+ stack.push(2);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_3.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_3.java
new file mode 100644
index 0000000000..138a0546c5
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_3.java
@@ -0,0 +1,24 @@
+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;
+
+import java.io.IOException;
+
+public class IConst_3 extends Instruction
+{
+ public IConst_3(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Stack stack = frame.getStack();
+ stack.push(3);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_4.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_4.java
new file mode 100644
index 0000000000..005e3e5429
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_4.java
@@ -0,0 +1,24 @@
+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;
+
+import java.io.IOException;
+
+public class IConst_4 extends Instruction
+{
+ public IConst_4(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Stack stack = frame.getStack();
+ stack.push(4);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_5.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_5.java
new file mode 100644
index 0000000000..606e46afca
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_5.java
@@ -0,0 +1,24 @@
+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;
+
+import java.io.IOException;
+
+public class IConst_5 extends Instruction
+{
+ public IConst_5(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Stack stack = frame.getStack();
+ stack.push(5);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_M1.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_M1.java
new file mode 100644
index 0000000000..2a1b6fcd90
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IConst_M1.java
@@ -0,0 +1,24 @@
+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;
+
+import java.io.IOException;
+
+public class IConst_M1 extends Instruction
+{
+ public IConst_M1(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Stack stack = frame.getStack();
+ stack.push(-1);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/ILoad_0.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/ILoad_0.java
new file mode 100644
index 0000000000..1d807a9bfd
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/ILoad_0.java
@@ -0,0 +1,24 @@
+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 ILoad_0 extends Instruction
+{
+ public ILoad_0(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(0);
+ assert obj instanceof Integer;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/ILoad_1.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/ILoad_1.java
new file mode 100644
index 0000000000..ae2db8ef51
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/ILoad_1.java
@@ -0,0 +1,24 @@
+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 ILoad_1 extends Instruction
+{
+ public ILoad_1(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(1);
+ assert obj instanceof Integer;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/ILoad_2.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/ILoad_2.java
new file mode 100644
index 0000000000..e2b75cc980
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/ILoad_2.java
@@ -0,0 +1,24 @@
+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 ILoad_2 extends Instruction
+{
+ public ILoad_2(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(2);
+ assert obj instanceof Integer;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/ILoad_3.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/ILoad_3.java
new file mode 100644
index 0000000000..24f761ce8b
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/ILoad_3.java
@@ -0,0 +1,24 @@
+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 ILoad_3 extends Instruction
+{
+ public ILoad_3(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(3);
+ assert obj instanceof Integer;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IMul.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IMul.java
new file mode 100644
index 0000000000..cb7f54eaaf
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IMul.java
@@ -0,0 +1,22 @@
+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;
+
+public class IMul extends Instruction
+{
+ public IMul(Instructions instructions, InstructionType type, int pc)
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Integer one = (Integer) frame.getStack().pop(), two = (Integer) frame.getStack().pop();
+ int result = one.intValue() * two.intValue();
+ frame.getStack().push(result);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IStore.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IStore.java
index be4785533b..cab39883b8 100644
--- a/src/main/java/info/sigterm/deob/attributes/code/instructions/IStore.java
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IStore.java
@@ -3,6 +3,7 @@ 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.DataInputStream;
import java.io.IOException;
@@ -20,4 +21,11 @@ public class IStore extends Instruction
length += 1;
}
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj instanceof Integer;
+ frame.getVariables().set(index, obj);
+ }
}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IStore_0.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IStore_0.java
new file mode 100644
index 0000000000..dfa6ec4800
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IStore_0.java
@@ -0,0 +1,24 @@
+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 IStore_0 extends Instruction
+{
+ public IStore_0(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj instanceof Integer;
+ frame.getVariables().set(0, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IStore_1.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IStore_1.java
new file mode 100644
index 0000000000..a56d55fa12
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IStore_1.java
@@ -0,0 +1,24 @@
+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 IStore_1 extends Instruction
+{
+ public IStore_1(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj instanceof Integer;
+ frame.getVariables().set(1, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IStore_2.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IStore_2.java
new file mode 100644
index 0000000000..7dd24e2c2f
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IStore_2.java
@@ -0,0 +1,24 @@
+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 IStore_2 extends Instruction
+{
+ public IStore_2(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj instanceof Integer;
+ frame.getVariables().set(2, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IStore_3.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IStore_3.java
new file mode 100644
index 0000000000..fdc3a93de2
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IStore_3.java
@@ -0,0 +1,24 @@
+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 IStore_3 extends Instruction
+{
+ public IStore_3(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj instanceof Integer;
+ frame.getVariables().set(3, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LConst_0.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LConst_0.java
new file mode 100644
index 0000000000..6c5f92a80c
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LConst_0.java
@@ -0,0 +1,24 @@
+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;
+
+import java.io.IOException;
+
+public class LConst_0 extends Instruction
+{
+ public LConst_0(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Stack stack = frame.getStack();
+ stack.push(0L);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LConst_1.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LConst_1.java
new file mode 100644
index 0000000000..c7da5fa845
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LConst_1.java
@@ -0,0 +1,24 @@
+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;
+
+import java.io.IOException;
+
+public class LConst_1 extends Instruction
+{
+ public LConst_1(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Stack stack = frame.getStack();
+ stack.push(1L);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LLoad_0.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LLoad_0.java
new file mode 100644
index 0000000000..36dd7eabfd
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LLoad_0.java
@@ -0,0 +1,24 @@
+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 LLoad_0 extends Instruction
+{
+ public LLoad_0(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(1);
+ assert obj instanceof Long;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LLoad_1.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LLoad_1.java
new file mode 100644
index 0000000000..32f566ddb5
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LLoad_1.java
@@ -0,0 +1,24 @@
+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 LLoad_1 extends Instruction
+{
+ public LLoad_1(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(1);
+ assert obj instanceof Long;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LLoad_2.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LLoad_2.java
new file mode 100644
index 0000000000..f98a7762b4
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LLoad_2.java
@@ -0,0 +1,24 @@
+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 LLoad_2 extends Instruction
+{
+ public LLoad_2(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(2);
+ assert obj instanceof Long;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LLoad_3.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LLoad_3.java
new file mode 100644
index 0000000000..2c9bb6f8b3
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LLoad_3.java
@@ -0,0 +1,24 @@
+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 LLoad_3 extends Instruction
+{
+ public LLoad_3(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getVariables().get(3);
+ assert obj instanceof Long;
+ frame.getStack().push(obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LStore_0.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LStore_0.java
new file mode 100644
index 0000000000..91ecf8acda
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LStore_0.java
@@ -0,0 +1,24 @@
+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 LStore_0 extends Instruction
+{
+ public LStore_0(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj instanceof Long;
+ frame.getVariables().set(0, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LStore_1.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LStore_1.java
new file mode 100644
index 0000000000..b449ccc78f
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LStore_1.java
@@ -0,0 +1,24 @@
+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 LStore_1 extends Instruction
+{
+ public LStore_1(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj instanceof Long;
+ frame.getVariables().set(1, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LStore_2.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LStore_2.java
new file mode 100644
index 0000000000..b4841fd62b
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LStore_2.java
@@ -0,0 +1,24 @@
+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 LStore_2 extends Instruction
+{
+ public LStore_2(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj instanceof Long;
+ frame.getVariables().set(2, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LStore_3.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LStore_3.java
new file mode 100644
index 0000000000..40cfbd3c74
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LStore_3.java
@@ -0,0 +1,24 @@
+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 LStore_3 extends Instruction
+{
+ public LStore_3(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ assert obj instanceof Long;
+ frame.getVariables().set(3, obj);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/NOP.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/NOP.java
new file mode 100644
index 0000000000..4eecd497e9
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/NOP.java
@@ -0,0 +1,21 @@
+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 NOP extends Instruction
+{
+ public NOP(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/Pop.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/Pop.java
new file mode 100644
index 0000000000..c2282c1ab2
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/Pop.java
@@ -0,0 +1,22 @@
+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 Pop extends Instruction
+{
+ public Pop(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ frame.getStack().pop();
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/Pop2.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/Pop2.java
new file mode 100644
index 0000000000..2f7b49fdf2
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/Pop2.java
@@ -0,0 +1,25 @@
+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 Pop2 extends Instruction
+{
+ public Pop2(Instructions instructions, InstructionType type, int pc) throws IOException
+ {
+ super(instructions, type, pc);
+ }
+
+ @Override
+ public void execute(Frame frame)
+ {
+ Object obj = frame.getStack().pop();
+ if (obj instanceof Double || obj instanceof Long)
+ return;
+ frame.getStack().pop();
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/execution/Execution.java b/src/main/java/info/sigterm/deob/execution/Execution.java
index 79527d5866..53e814d471 100644
--- a/src/main/java/info/sigterm/deob/execution/Execution.java
+++ b/src/main/java/info/sigterm/deob/execution/Execution.java
@@ -1,12 +1,14 @@
package info.sigterm.deob.execution;
import info.sigterm.deob.ClassGroup;
-import info.sigterm.deob.pool.Method;
+import info.sigterm.deob.Method;
+
+import java.util.ArrayList;
public class Execution
{
private ClassGroup group;
- private java.util.Stack frames = new java.util.Stack();
+ private ArrayList paths = new ArrayList(); // paths of execution
public Execution(ClassGroup group)
{
@@ -15,5 +17,7 @@ public class Execution
public void run(Method method, Object... args)
{
+ Path p = new Path(this);
+ p.init(method, args);
}
}
diff --git a/src/main/java/info/sigterm/deob/execution/Frame.java b/src/main/java/info/sigterm/deob/execution/Frame.java
index 5a96c404a7..ebc11d0895 100644
--- a/src/main/java/info/sigterm/deob/execution/Frame.java
+++ b/src/main/java/info/sigterm/deob/execution/Frame.java
@@ -5,19 +5,38 @@ import info.sigterm.deob.attributes.Code;
public class Frame
{
- private Execution execution;
+ private Path path;
private Method method;
private Stack stack;
private Variables variables;
- public Frame(Execution execution, Method method)
+ public Frame(Path path, Method method)
{
Code code = method.getCode();
- this.execution = execution;
+ this.path = path;
this.method = method;
stack = new Stack(code.getMaxStack());
variables = new Variables(code.getMaxLocals());
}
+
+ public Stack getStack()
+ {
+ return stack;
+ }
+
+ public Variables getVariables()
+ {
+ return variables;
+ }
+
+ public void init(Method method, Object[] args)
+ {
+ for (Object o : args)
+ stack.push(o);
+
+ Code code = method.getCode();
+ code.execute(this);
+ }
}
diff --git a/src/main/java/info/sigterm/deob/execution/Path.java b/src/main/java/info/sigterm/deob/execution/Path.java
new file mode 100644
index 0000000000..be4d0c7ade
--- /dev/null
+++ b/src/main/java/info/sigterm/deob/execution/Path.java
@@ -0,0 +1,21 @@
+package info.sigterm.deob.execution;
+
+import info.sigterm.deob.Method;
+
+public class Path
+{
+ private Execution execution;
+ private java.util.Stack frames = new java.util.Stack(); // current execution frames
+
+ public Path(Execution execution)
+ {
+ this.execution = execution;
+ }
+
+ public void init(Method method, Object[] args)
+ {
+ Frame f = new Frame(this, method);
+ frames.push(f);
+ f.init(method, args);
+ }
+}
diff --git a/src/main/java/info/sigterm/deob/execution/Variables.java b/src/main/java/info/sigterm/deob/execution/Variables.java
index 634d953f96..f96e479356 100644
--- a/src/main/java/info/sigterm/deob/execution/Variables.java
+++ b/src/main/java/info/sigterm/deob/execution/Variables.java
@@ -2,10 +2,20 @@ package info.sigterm.deob.execution;
public class Variables
{
- private Object variables;
+ private Object[] variables;
public Variables(int sz)
{
variables = new Object[sz];
}
+
+ public void set(int index, Object value)
+ {
+ variables[index] = value;
+ }
+
+ public Object get(int index)
+ {
+ return variables[index];
+ }
}