From d16a3a266c26b17b4a63cb364bfe68ce09d5c916 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jindra=20Pet=C5=99=C3=ADk?= Date: Thu, 29 Oct 2015 22:12:39 +0100 Subject: [PATCH] Issue #1008 pushshort instruction diassembly fix --- .../src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java | 5 +++++ .../flash/abc/avm2/instructions/AVM2Instruction.java | 2 ++ .../flash/abc/avm2/instructions/InstructionDefinition.java | 3 +++ .../flash/abc/avm2/instructions/stack/PushShortIns.java | 2 +- 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java index c09ea8a49..23fb81c54 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/AVM2Code.java @@ -332,6 +332,8 @@ public class AVM2Code implements Cloneable { public static final int OPT_BYTE = 0x500; + public static final int OPT_U30_SHORT = 0x600; + public static final int DAT_MULTINAME_INDEX = OPT_U30 + 0x01; public static final int DAT_ARG_COUNT = OPT_U30 + 0x02; @@ -876,6 +878,9 @@ public class AVM2Code implements Cloneable { case OPT_U30: actualOperands[op] = ais.readU30("operand"); break; + case OPT_U30_SHORT: + actualOperands[op] = (short) ais.readU30("operand"); + break; case OPT_U8: actualOperands[op] = ais.read("operand"); break; diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java index 5b54679b7..785a68386 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/AVM2Instruction.java @@ -88,6 +88,7 @@ public class AVM2Instruction implements Cloneable, GraphSourceItem { aos.writeS24(operands[i]); break; case AVM2Code.OPT_U30: + case AVM2Code.OPT_U30_SHORT: aos.writeU30(operands[i]); break; case AVM2Code.OPT_U8: @@ -120,6 +121,7 @@ public class AVM2Instruction implements Cloneable, GraphSourceItem { cnt += 3; break; case AVM2Code.OPT_U30: + case AVM2Code.OPT_U30_SHORT: cnt += ABCOutputStream.getU30ByteLength(operands[i]); break; case AVM2Code.OPT_U8: diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java index fa7b19332..73e76ffbd 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/InstructionDefinition.java @@ -68,6 +68,9 @@ public abstract class InstructionDefinition implements Serializable { if ((operands[i] & 0xff00) == AVM2Code.OPT_U30) { s.append(" U30"); } + if ((operands[i] & 0xff00) == AVM2Code.OPT_U30_SHORT) { + s.append(" U30"); + } if ((operands[i] & 0xff00) == AVM2Code.OPT_U8) { s.append(" U8"); } diff --git a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/stack/PushShortIns.java b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/stack/PushShortIns.java index 46d605187..6ee1d747d 100644 --- a/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/stack/PushShortIns.java +++ b/libsrc/ffdec_lib/src/com/jpexs/decompiler/flash/abc/avm2/instructions/stack/PushShortIns.java @@ -31,7 +31,7 @@ import java.util.List; public class PushShortIns extends InstructionDefinition implements PushIntegerTypeIns { public PushShortIns() { - super(0x25, "pushshort", new int[]{AVM2Code.OPT_U30}, false); + super(0x25, "pushshort", new int[]{AVM2Code.OPT_U30_SHORT}, false); } @Override