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 64727a2da8..927e069374 100644 --- a/src/main/java/info/sigterm/deob/attributes/code/InstructionType.java +++ b/src/main/java/info/sigterm/deob/attributes/code/InstructionType.java @@ -99,43 +99,43 @@ public enum InstructionType DUP2(0x5c, "dup2", Dup2.class), DUP2_X1(0x5d, "dup2_x1", Dup2_X1.class), DUP2_X2(0x5e, "dup2_x2", Dup2_X2.class), - SWAP(0x5f, "swap", Instruction.class), - IADD(0x60, "iadd", Instruction.class), - LADD(0x61, "ladd", Instruction.class), - FADD(0x62, "fadd", Instruction.class), - DADD(0x63, "dadd", Instruction.class), - ISUB(0x64, "isub", Instruction.class), - LSUB(0x65, "lsub", Instruction.class), - FSUB(0x66, "fsub", Instruction.class), - DSUB(0x67, "dsub", Instruction.class), + SWAP(0x5f, "swap", Swap.class), + IADD(0x60, "iadd", IAdd.class), + LADD(0x61, "ladd", LAdd.class), + FADD(0x62, "fadd", FAdd.class), + DADD(0x63, "dadd", DAdd.class), + ISUB(0x64, "isub", ISub.class), + LSUB(0x65, "lsub", LSub.class), + FSUB(0x66, "fsub", FSub.class), + DSUB(0x67, "dsub", DSub.class), IMUL(0x68, "imul", IMul.class), - LMUL(0x69, "lmul", Instruction.class), - FMUL(0x6a, "fmul", Instruction.class), - DMUL(0x6b, "dmul", Instruction.class), - IDIV(0x6c, "idiv", Instruction.class), - LDIV(0x6d, "ldiv", Instruction.class), - FDIV(0x6e, "fdiv", Instruction.class), - DDIV(0x6f, "ddiv", Instruction.class), - IREM(0x70, "irem", Instruction.class), - LREM(0x71, "lrem", Instruction.class), - FREM(0x72, "frem", Instruction.class), - DREM(0x73, "drem", Instruction.class), - INEG(0x74, "ineg", Instruction.class), - LNEG(0x75, "lneg", Instruction.class), - FNEG(0x76, "fneg", Instruction.class), - DNEG(0x77, "dneg", Instruction.class), - ISHL(0x78, "ishl", Instruction.class), - LSHL(0x79, "lshl", Instruction.class), - ISHR(0x7a, "ishr", Instruction.class), - LSHR(0x7b, "lshr", Instruction.class), - IUSHR(0x7c, "iushr", Instruction.class), - LUSHR(0x7d, "lushr", Instruction.class), - IAND(0x7e, "iand", Instruction.class), - LAND(0x7f, "land", Instruction.class), - IOR(0x80, "ior", Instruction.class), - LOR(0x81, "lor", Instruction.class), - IXOR(0x82, "ixor", Instruction.class), - LXOR(0x83, "lxor", Instruction.class), + LMUL(0x69, "lmul", LMul.class), + FMUL(0x6a, "fmul", FMul.class), + DMUL(0x6b, "dmul", DMul.class), + IDIV(0x6c, "idiv", IDiv.class), + LDIV(0x6d, "ldiv", LDiv.class), + FDIV(0x6e, "fdiv", FDiv.class), + DDIV(0x6f, "ddiv", DDiv.class), + IREM(0x70, "irem", IRem.class), + LREM(0x71, "lrem", LRem.class), + FREM(0x72, "frem", FRem.class), + DREM(0x73, "drem", DRem.class), + INEG(0x74, "ineg", INeg.class), + LNEG(0x75, "lneg", LNeg.class), + FNEG(0x76, "fneg", FNeg.class), + DNEG(0x77, "dneg", DNeg.class), + ISHL(0x78, "ishl", IShL.class), + LSHL(0x79, "lshl", LShL.class), + ISHR(0x7a, "ishr", IShR.class), + LSHR(0x7b, "lshr", LShR.class), + IUSHR(0x7c, "iushr", IUShR.class), + LUSHR(0x7d, "lushr", LUShR.class), + IAND(0x7e, "iand", IAnd.class), + LAND(0x7f, "land", LAnd.class), + IOR(0x80, "ior", IOr.class), + LOR(0x81, "lor", LOr.class), + IXOR(0x82, "ixor", IXor.class), + LXOR(0x83, "lxor", LXor.class), IINC(0x84, "iinc", IInc.class), I2L(0x85, "i2l", I2L.class), I2F(0x86, "i2f", I2F.class), diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/DAdd.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/DAdd.java new file mode 100644 index 0000000000..fea8061e0c --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/DAdd.java @@ -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 DAdd extends Instruction +{ + public DAdd(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Double two = (Double) stack.pop(); + Double one = (Double) stack.pop(); + + stack.push(one + two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/DDiv.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/DDiv.java new file mode 100644 index 0000000000..7f05ea96e6 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/DDiv.java @@ -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 DDiv extends Instruction +{ + public DDiv(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Double two = (Double) stack.pop(); + Double one = (Double) stack.pop(); + + stack.push(one / two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/DMul.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/DMul.java new file mode 100644 index 0000000000..026681f355 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/DMul.java @@ -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 DMul extends Instruction +{ + public DMul(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Double two = (Double) stack.pop(); + Double one = (Double) stack.pop(); + + stack.push(one * two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/DNeg.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/DNeg.java new file mode 100644 index 0000000000..9c84dcfad9 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/DNeg.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; + +public class DNeg extends Instruction +{ + public DNeg(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(); + stack.push(-value); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/DRem.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/DRem.java new file mode 100644 index 0000000000..738ad6e969 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/DRem.java @@ -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 DRem extends Instruction +{ + public DRem(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Double two = (Double) stack.pop(); + Double one = (Double) stack.pop(); + + stack.push(one % two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/DSub.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/DSub.java new file mode 100644 index 0000000000..0d2f95b1be --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/DSub.java @@ -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 DSub extends Instruction +{ + public DSub(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Double two = (Double) stack.pop(); + Double one = (Double) stack.pop(); + + stack.push(one - two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/FAdd.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/FAdd.java new file mode 100644 index 0000000000..40b3141f48 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/FAdd.java @@ -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 FAdd extends Instruction +{ + public FAdd(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Float one = (Float) stack.pop(); + Float two = (Float) stack.pop(); + + stack.push(one + two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/FDiv.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/FDiv.java new file mode 100644 index 0000000000..9b306c9ebb --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/FDiv.java @@ -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 FDiv extends Instruction +{ + public FDiv(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Float two = (Float) stack.pop(); + Float one = (Float) stack.pop(); + + stack.push(one / two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/FMul.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/FMul.java new file mode 100644 index 0000000000..7e866eddd5 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/FMul.java @@ -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 FMul extends Instruction +{ + public FMul(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Float two = (Float) stack.pop(); + Float one = (Float) stack.pop(); + + stack.push(one * two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/FNeg.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/FNeg.java new file mode 100644 index 0000000000..f27e248bdf --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/FNeg.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; + +public class FNeg extends Instruction +{ + public FNeg(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(); + stack.push(-value); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/FRem.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/FRem.java new file mode 100644 index 0000000000..30b7150a2a --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/FRem.java @@ -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 FRem extends Instruction +{ + public FRem(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Float two = (Float) stack.pop(); + Float one = (Float) stack.pop(); + + stack.push(one % two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/FSub.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/FSub.java new file mode 100644 index 0000000000..1904b97327 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/FSub.java @@ -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 FSub extends Instruction +{ + public FSub(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Float two = (Float) stack.pop(); + Float one = (Float) stack.pop(); + + stack.push(one - two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IAdd.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IAdd.java new file mode 100644 index 0000000000..69f1327626 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IAdd.java @@ -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 IAdd extends Instruction +{ + public IAdd(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Integer two = (Integer) stack.pop(); + Integer one = (Integer) stack.pop(); + + stack.push(one + two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IAnd.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IAnd.java new file mode 100644 index 0000000000..a4b64fb29f --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IAnd.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 info.sigterm.deob.execution.Stack; + +public class IAnd extends Instruction +{ + public IAnd(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Integer two = (Integer) stack.pop(); + Integer one = (Integer) stack.pop(); + stack.push(one & two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IDiv.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IDiv.java new file mode 100644 index 0000000000..c33bebdc44 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IDiv.java @@ -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 IDiv extends Instruction +{ + public IDiv(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Double two = (Double) stack.pop(); + Double one = (Double) stack.pop(); + + stack.push(one / two); + } +} 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 index cb7f54eaaf..2f3730fdc9 100644 --- a/src/main/java/info/sigterm/deob/attributes/code/instructions/IMul.java +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IMul.java @@ -4,6 +4,7 @@ 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 IMul extends Instruction { @@ -15,8 +16,11 @@ public class IMul extends Instruction @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); + Stack stack = frame.getStack(); + + Integer two = (Integer) stack.pop(); + Integer one = (Integer) stack.pop(); + + stack.push(one * two); } } diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/INeg.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/INeg.java new file mode 100644 index 0000000000..4d8c6e9b2d --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/INeg.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; + +public class INeg extends Instruction +{ + public INeg(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Integer value = (Integer) stack.pop(); + stack.push(-value); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IOr.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IOr.java new file mode 100644 index 0000000000..aa0540c533 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IOr.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 info.sigterm.deob.execution.Stack; + +public class IOr extends Instruction +{ + public IOr(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Integer two = (Integer) stack.pop(); + Integer one = (Integer) stack.pop(); + stack.push(one | two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IRem.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IRem.java new file mode 100644 index 0000000000..60ab180998 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IRem.java @@ -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 IRem extends Instruction +{ + public IRem(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Integer two = (Integer) stack.pop(); + Integer one = (Integer) stack.pop(); + + stack.push(one % two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IShL.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IShL.java new file mode 100644 index 0000000000..c07811af45 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IShL.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 info.sigterm.deob.execution.Stack; + +public class IShL extends Instruction +{ + public IShL(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Integer two = (Integer) stack.pop(); + Integer one = (Integer) stack.pop(); + stack.push(one << (two & 0x1F)); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IShR.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IShR.java new file mode 100644 index 0000000000..626047214a --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IShR.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 info.sigterm.deob.execution.Stack; + +public class IShR extends Instruction +{ + public IShR(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Integer two = (Integer) stack.pop(); + Integer one = (Integer) stack.pop(); + stack.push(one >> (two & 0x1F)); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/ISub.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/ISub.java new file mode 100644 index 0000000000..1f6166c7dd --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/ISub.java @@ -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 ISub extends Instruction +{ + public ISub(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Integer two = (Integer) stack.pop(); + Integer one = (Integer) stack.pop(); + + stack.push(one - two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IUShR.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IUShR.java new file mode 100644 index 0000000000..5f12ab9351 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IUShR.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 info.sigterm.deob.execution.Stack; + +public class IUShR extends Instruction +{ + public IUShR(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Integer two = (Integer) stack.pop(); + Integer one = (Integer) stack.pop(); + stack.push(one >>> (two & 0x1F)); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/IXor.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/IXor.java new file mode 100644 index 0000000000..bba109e45b --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/IXor.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 info.sigterm.deob.execution.Stack; + +public class IXor extends Instruction +{ + public IXor(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Integer two = (Integer) stack.pop(); + Integer one = (Integer) stack.pop(); + stack.push(one ^ two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LAdd.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LAdd.java new file mode 100644 index 0000000000..f6ccf13b69 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LAdd.java @@ -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 LAdd extends Instruction +{ + public LAdd(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Long two = (Long) stack.pop(); + Long one = (Long) stack.pop(); + + stack.push(one + two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LAnd.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LAnd.java new file mode 100644 index 0000000000..aa95a148a1 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LAnd.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 info.sigterm.deob.execution.Stack; + +public class LAnd extends Instruction +{ + public LAnd(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Long two = (Long) stack.pop(); + Long one = (Long) stack.pop(); + stack.push(one & two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LDiv.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LDiv.java new file mode 100644 index 0000000000..09ea46109f --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LDiv.java @@ -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 LDiv extends Instruction +{ + public LDiv(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Long two = (Long) stack.pop(); + Long one = (Long) stack.pop(); + + stack.push(one / two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LMul.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LMul.java new file mode 100644 index 0000000000..a90ada0e9e --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LMul.java @@ -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 LMul extends Instruction +{ + public LMul(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Long two = (Long) stack.pop(); + Long one = (Long) stack.pop(); + + stack.push(one * two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LNeg.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LNeg.java new file mode 100644 index 0000000000..28621f594a --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LNeg.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; + +public class LNeg extends Instruction +{ + public LNeg(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(); + stack.push(-value); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LOr.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LOr.java new file mode 100644 index 0000000000..dbb1520ea3 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LOr.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 info.sigterm.deob.execution.Stack; + +public class LOr extends Instruction +{ + public LOr(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Long two = (Long) stack.pop(); + Long one = (Long) stack.pop(); + stack.push(one | two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LRem.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LRem.java new file mode 100644 index 0000000000..f4a129d3c9 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LRem.java @@ -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 LRem extends Instruction +{ + public LRem(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Long two = (Long) stack.pop(); + Long one = (Long) stack.pop(); + + stack.push(one % two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LShL.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LShL.java new file mode 100644 index 0000000000..cf7c8e4f79 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LShL.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 info.sigterm.deob.execution.Stack; + +public class LShL extends Instruction +{ + public LShL(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Long two = (Long) stack.pop(); + Long one = (Long) stack.pop(); + stack.push(one << (two & 0x3F)); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LShR.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LShR.java new file mode 100644 index 0000000000..8bfdf0bcdf --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LShR.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 info.sigterm.deob.execution.Stack; + +public class LShR extends Instruction +{ + public LShR(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Long two = (Long) stack.pop(); + Long one = (Long) stack.pop(); + stack.push(one >> (two & 0x3F)); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LSub.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LSub.java new file mode 100644 index 0000000000..67a335ac95 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LSub.java @@ -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 LSub extends Instruction +{ + public LSub(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Long two = (Long) stack.pop(); + Long one = (Long) stack.pop(); + + stack.push(one - two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LUShR.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LUShR.java new file mode 100644 index 0000000000..646ab8da87 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LUShR.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 info.sigterm.deob.execution.Stack; + +public class LUShR extends Instruction +{ + public LUShR(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Long two = (Long) stack.pop(); + Long one = (Long) stack.pop(); + stack.push(one >>> (two & 0x3F)); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/LXor.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/LXor.java new file mode 100644 index 0000000000..63378d2af1 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/LXor.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 info.sigterm.deob.execution.Stack; + +public class LXor extends Instruction +{ + public LXor(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Long two = (Long) stack.pop(); + Long one = (Long) stack.pop(); + stack.push(one ^ two); + } +} diff --git a/src/main/java/info/sigterm/deob/attributes/code/instructions/Swap.java b/src/main/java/info/sigterm/deob/attributes/code/instructions/Swap.java new file mode 100644 index 0000000000..7c7cf17f96 --- /dev/null +++ b/src/main/java/info/sigterm/deob/attributes/code/instructions/Swap.java @@ -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 Swap extends Instruction +{ + public Swap(Instructions instructions, InstructionType type, int pc) + { + super(instructions, type, pc); + } + + @Override + public void execute(Frame frame) + { + Stack stack = frame.getStack(); + + Object one = stack.pop(); + Object two = stack.pop(); + + stack.push(one); + stack.push(two); + } +}