diff options
author | Ben Gruver <bgruv@google.com> | 2011-11-20 11:39:21 -0800 |
---|---|---|
committer | = <bgruv@google.com> | 2011-11-20 15:47:53 -0800 |
commit | 0d785ac31557f35f084204d2f7de1af900f8a7a3 (patch) | |
tree | af6e7784baf3abf814f810e45e095c9b8362a5d2 | |
parent | 4dda65fdb3a96ac6cecff9d0da30526cf0a0d344 (diff) | |
download | smali-0d785ac31557f35f084204d2f7de1af900f8a7a3.tar.gz |
Add support for jumbo volatile field access opcodes
8 files changed, 230 insertions, 10 deletions
diff --git a/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/MethodAnalyzer.java b/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/MethodAnalyzer.java index d90226af..b1d71a96 100644 --- a/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/MethodAnalyzer.java +++ b/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/MethodAnalyzer.java @@ -1098,6 +1098,20 @@ public class MethodAnalyzer { case INVOKE_OBJECT_INIT_JUMBO: analyzeInvokeObjectInitJumbo(analyzedInstruction); return true; + case IGET_VOLATILE_JUMBO: + case IGET_WIDE_VOLATILE_JUMBO: + case IGET_OBJECT_VOLATILE_JUMBO: + case IPUT_VOLATILE_JUMBO: + case IPUT_WIDE_VOLATILE_JUMBO: + case IPUT_OBJECT_VOLATILE_JUMBO: + case SGET_VOLATILE_JUMBO: + case SGET_WIDE_VOLATILE_JUMBO: + case SGET_OBJECT_VOLATILE_JUMBO: + case SPUT_VOLATILE_JUMBO: + case SPUT_WIDE_VOLATILE_JUMBO: + case SPUT_OBJECT_VOLATILE_JUMBO: + analyzePutGetVolatile(analyzedInstruction); + return true; default: assert false; return true; @@ -1593,6 +1607,18 @@ public class MethodAnalyzer { case SGET_OBJECT_VOLATILE: case SPUT_OBJECT_VOLATILE: case INVOKE_OBJECT_INIT_JUMBO: + case IGET_VOLATILE_JUMBO: + case IGET_WIDE_VOLATILE_JUMBO: + case IGET_OBJECT_VOLATILE_JUMBO: + case IPUT_VOLATILE_JUMBO: + case IPUT_WIDE_VOLATILE_JUMBO: + case IPUT_OBJECT_VOLATILE_JUMBO: + case SGET_VOLATILE_JUMBO: + case SGET_WIDE_VOLATILE_JUMBO: + case SGET_OBJECT_VOLATILE_JUMBO: + case SPUT_VOLATILE_JUMBO: + case SPUT_WIDE_VOLATILE_JUMBO: + case SPUT_OBJECT_VOLATILE_JUMBO: //TODO: throw validation exception? default: assert false; @@ -3627,14 +3653,23 @@ public class MethodAnalyzer { if (analyzedInstruction.instruction.opcode.isOdexedStaticVolatile()) { SingleRegisterInstruction instruction = (SingleRegisterInstruction)analyzedInstruction.instruction; - - deodexedInstruction = new Instruction21c(opcode, (byte)instruction.getRegisterA(), - fieldIdItem); + if (analyzedInstruction.instruction.opcode.format == Format.Format21c) { + deodexedInstruction = new Instruction21c(opcode, (byte)instruction.getRegisterA(), fieldIdItem); + } else { + assert(analyzedInstruction.instruction.opcode.format == Format.Format41c); + deodexedInstruction = new Instruction41c(opcode, (byte)instruction.getRegisterA(), fieldIdItem); + } } else { TwoRegisterInstruction instruction = (TwoRegisterInstruction)analyzedInstruction.instruction; - deodexedInstruction = new Instruction22c(opcode, (byte)instruction.getRegisterA(), - (byte)instruction.getRegisterB(), fieldIdItem); + if (analyzedInstruction.instruction.opcode.format == Format.Format22c) { + deodexedInstruction = new Instruction22c(opcode, (byte)instruction.getRegisterA(), + (byte)instruction.getRegisterB(), fieldIdItem); + } else { + assert(analyzedInstruction.instruction.opcode.format == Format.Format52c); + deodexedInstruction = new Instruction52c(opcode, (byte)instruction.getRegisterA(), + (byte)instruction.getRegisterB(), fieldIdItem); + } } analyzedInstruction.setDeodexedInstruction(deodexedInstruction); diff --git a/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/OdexedFieldInstructionMapper.java b/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/OdexedFieldInstructionMapper.java index 2facd985..644cbd3e 100644 --- a/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/OdexedFieldInstructionMapper.java +++ b/dexlib/src/main/java/org/jf/dexlib/Code/Analysis/OdexedFieldInstructionMapper.java @@ -178,6 +178,107 @@ public class OdexedFieldInstructionMapper { } }; + private static Opcode[][][][] jumboOpcodeMap = new Opcode[][][][] { + //get opcodes + new Opcode[][][] { + //iget volatile + new Opcode[][] { + //odexed + new Opcode[] { + /*Z*/ Opcode.IGET_VOLATILE_JUMBO, + /*B*/ Opcode.IGET_VOLATILE_JUMBO, + /*S*/ Opcode.IGET_VOLATILE_JUMBO, + /*C*/ Opcode.IGET_VOLATILE_JUMBO, + /*I,F*/ Opcode.IGET_VOLATILE_JUMBO, + /*J,D*/ Opcode.IGET_WIDE_VOLATILE_JUMBO, + /*L,[*/ Opcode.IGET_OBJECT_VOLATILE_JUMBO + }, + //deodexed + new Opcode[] { + /*Z*/ Opcode.IGET_BOOLEAN_JUMBO, + /*B*/ Opcode.IGET_BYTE_JUMBO, + /*S*/ Opcode.IGET_SHORT_JUMBO, + /*C*/ Opcode.IGET_CHAR_JUMBO, + /*I,F*/ Opcode.IGET_JUMBO, + /*J,D*/ Opcode.IGET_WIDE_JUMBO, + /*L,[*/ Opcode.IGET_OBJECT_JUMBO + } + }, + //sget volatile + new Opcode[][] { + //odexed + new Opcode[] { + /*Z*/ Opcode.SGET_VOLATILE_JUMBO, + /*B*/ Opcode.SGET_VOLATILE_JUMBO, + /*S*/ Opcode.SGET_VOLATILE_JUMBO, + /*C*/ Opcode.SGET_VOLATILE_JUMBO, + /*I,F*/ Opcode.SGET_VOLATILE_JUMBO, + /*J,D*/ Opcode.SGET_WIDE_VOLATILE_JUMBO, + /*L,[*/ Opcode.SGET_OBJECT_VOLATILE_JUMBO + }, + //deodexed + new Opcode[] { + /*Z*/ Opcode.SGET_BOOLEAN_JUMBO, + /*B*/ Opcode.SGET_BYTE_JUMBO, + /*S*/ Opcode.SGET_SHORT_JUMBO, + /*C*/ Opcode.SGET_CHAR_JUMBO, + /*I,F*/ Opcode.SGET_JUMBO, + /*J,D*/ Opcode.SGET_WIDE_JUMBO, + /*L,[*/ Opcode.SGET_OBJECT_JUMBO + } + } + }, + //put opcodes + new Opcode[][][] { + //iput volatile + new Opcode[][] { + //odexed + new Opcode[] { + /*Z*/ Opcode.IPUT_VOLATILE_JUMBO, + /*B*/ Opcode.IPUT_VOLATILE_JUMBO, + /*S*/ Opcode.IPUT_VOLATILE_JUMBO, + /*C*/ Opcode.IPUT_VOLATILE_JUMBO, + /*I,F*/ Opcode.IPUT_VOLATILE_JUMBO, + /*J,D*/ Opcode.IPUT_WIDE_VOLATILE_JUMBO, + /*L,[*/ Opcode.IPUT_OBJECT_VOLATILE_JUMBO + }, + //deodexed + new Opcode[] { + /*Z*/ Opcode.IPUT_BOOLEAN_JUMBO, + /*B*/ Opcode.IPUT_BYTE_JUMBO, + /*S*/ Opcode.IPUT_SHORT_JUMBO, + /*C*/ Opcode.IPUT_CHAR_JUMBO, + /*I,F*/ Opcode.IPUT_JUMBO, + /*J,D*/ Opcode.IPUT_WIDE_JUMBO, + /*L,[*/ Opcode.IPUT_OBJECT_JUMBO + } + }, + //sput volatile + new Opcode[][] { + //odexed + new Opcode[] { + /*Z*/ Opcode.SPUT_VOLATILE_JUMBO, + /*B*/ Opcode.SPUT_VOLATILE_JUMBO, + /*S*/ Opcode.SPUT_VOLATILE_JUMBO, + /*C*/ Opcode.SPUT_VOLATILE_JUMBO, + /*I,F*/ Opcode.SPUT_VOLATILE_JUMBO, + /*J,D*/ Opcode.SPUT_WIDE_VOLATILE_JUMBO, + /*L,[*/ Opcode.SPUT_OBJECT_VOLATILE_JUMBO + }, + //deodexed + new Opcode[] { + /*Z*/ Opcode.SPUT_BOOLEAN_JUMBO, + /*B*/ Opcode.SPUT_BYTE_JUMBO, + /*S*/ Opcode.SPUT_SHORT_JUMBO, + /*C*/ Opcode.SPUT_CHAR_JUMBO, + /*I,F*/ Opcode.SPUT_JUMBO, + /*J,D*/ Opcode.SPUT_WIDE_JUMBO, + /*L,[*/ Opcode.SPUT_OBJECT_JUMBO + } + } + } + }; + private static int getTypeIndex(char type) { switch (type) { case 'Z': @@ -214,12 +315,20 @@ public class OdexedFieldInstructionMapper { } static Opcode getAndCheckDeodexedOpcodeForOdexedOpcode(String fieldType, Opcode odexedOpcode) { + boolean jumbo = odexedOpcode.isJumboOpcode(); int opcodeType = odexedOpcode.setsRegister()?0:1; int opcodeSubType = getOpcodeSubtype(odexedOpcode); int typeIndex = getTypeIndex(fieldType.charAt(0)); - Opcode correctOdexedOpcode = opcodeMap[opcodeType][opcodeSubType][0][typeIndex]; - Opcode deodexedOpcode = opcodeMap[opcodeType][opcodeSubType][1][typeIndex]; + Opcode correctOdexedOpcode, deodexedOpcode; + + if (jumbo) { + correctOdexedOpcode = jumboOpcodeMap[opcodeType][opcodeSubType-1][0][typeIndex]; + deodexedOpcode = jumboOpcodeMap[opcodeType][opcodeSubType-1][1][typeIndex]; + } else { + correctOdexedOpcode = opcodeMap[opcodeType][opcodeSubType][0][typeIndex]; + deodexedOpcode = opcodeMap[opcodeType][opcodeSubType][1][typeIndex]; + } if (correctOdexedOpcode != odexedOpcode) { throw new ValidationException(String.format("Incorrect field type \"%s\" for %s", fieldType, diff --git a/dexlib/src/main/java/org/jf/dexlib/Code/Opcode.java b/dexlib/src/main/java/org/jf/dexlib/Code/Opcode.java index 92b82ab0..d1abc88f 100644 --- a/dexlib/src/main/java/org/jf/dexlib/Code/Opcode.java +++ b/dexlib/src/main/java/org/jf/dexlib/Code/Opcode.java @@ -325,6 +325,18 @@ public enum Opcode INVOKE_INTERFACE_JUMBO((short)0xff26, "invoke-interface/jumbo", ReferenceType.method, Format.Format5rc, Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT | Opcode.JUMBO_OPCODE), INVOKE_OBJECT_INIT_JUMBO((short)0xfff2, "invoke-object-init/jumbo", ReferenceType.method, Format.Format5rc, Opcode.ODEX_ONLY | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_RESULT | Opcode.JUMBO_OPCODE), + IGET_VOLATILE_JUMBO((short)0xfff3, "iget-volatile/jumbo", ReferenceType.field, Format.Format52c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.JUMBO_OPCODE), + IGET_WIDE_VOLATILE_JUMBO((short)0xfff4, "iget-wide-volatile/jumbo", ReferenceType.field, Format.Format52c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER | Opcode.JUMBO_OPCODE), + IGET_OBJECT_VOLATILE_JUMBO((short)0xfff5, "iget-object-volatile/jumbo", ReferenceType.field, Format.Format52c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.JUMBO_OPCODE), + IPUT_VOLATILE_JUMBO((short)0xfff6, "iput-volatile/jumbo", ReferenceType.field, Format.Format52c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.JUMBO_OPCODE), + IPUT_WIDE_VOLATILE_JUMBO((short)0xfff7, "iput-wide-volatile/jumbo", ReferenceType.field, Format.Format52c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.JUMBO_OPCODE), + IPUT_OBJECT_VOLATILE_JUMBO((short)0xfff8, "iput-object-volatile/jumbo", ReferenceType.field, Format.Format52c, Opcode.ODEX_ONLY | Opcode.ODEXED_INSTANCE_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.JUMBO_OPCODE), + SGET_VOLATILE_JUMBO((short)0xfff9, "sget-volatile/jumbo", ReferenceType.field, Format.Format41c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.JUMBO_OPCODE), + SGET_WIDE_VOLATILE_JUMBO((short)0xfffa, "sget-wide-volatile/jumbo", ReferenceType.field, Format.Format41c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.SETS_WIDE_REGISTER | Opcode.JUMBO_OPCODE), + SGET_OBJECT_VOLATILE_JUMBO((short)0xfffb, "sget-object-volatile/jumbo", ReferenceType.field, Format.Format41c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.SETS_REGISTER | Opcode.JUMBO_OPCODE), + SPUT_VOLATILE_JUMBO((short)0xfffc, "sput-volatile/jumbo", ReferenceType.field, Format.Format41c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.JUMBO_OPCODE), + SPUT_WIDE_VOLATILE_JUMBO((short)0xfffd, "sput-wide-volatile/jumbo", ReferenceType.field, Format.Format41c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.JUMBO_OPCODE), + SPUT_OBJECT_VOLATILE_JUMBO((short)0xfffe, "sput-object-volatile/jumbo", ReferenceType.field, Format.Format41c, Opcode.ODEX_ONLY | Opcode.ODEXED_STATIC_VOLATILE | Opcode.CAN_THROW | Opcode.CAN_CONTINUE | Opcode.JUMBO_OPCODE); private static Opcode[] opcodesByValue; private static Opcode[] expandedOpcodesByValue; @@ -436,7 +448,11 @@ public enum Opcode SGET_CHAR_JUMBO, SGET_SHORT_JUMBO, SPUT_JUMBO, SPUT_WIDE_JUMBO, SPUT_OBJECT_JUMBO, SPUT_BOOLEAN_JUMBO, SPUT_BYTE_JUMBO, SPUT_CHAR_JUMBO, SPUT_SHORT_JUMBO, INVOKE_VIRTUAL_JUMBO, INVOKE_SUPER_JUMBO, INVOKE_DIRECT_JUMBO, INVOKE_STATIC_JUMBO, INVOKE_INTERFACE_JUMBO, - INVOKE_OBJECT_INIT_RANGE, INVOKE_OBJECT_INIT_JUMBO); + INVOKE_OBJECT_INIT_RANGE, INVOKE_OBJECT_INIT_JUMBO, IGET_VOLATILE_JUMBO, IGET_WIDE_VOLATILE_JUMBO, + IGET_OBJECT_VOLATILE_JUMBO, IPUT_VOLATILE_JUMBO, IPUT_WIDE_VOLATILE_JUMBO, + IPUT_OBJECT_VOLATILE_JUMBO, SGET_VOLATILE_JUMBO, SGET_WIDE_VOLATILE_JUMBO, + SGET_OBJECT_VOLATILE_JUMBO, SPUT_VOLATILE_JUMBO, SPUT_WIDE_VOLATILE_JUMBO, + SPUT_OBJECT_VOLATILE_JUMBO); addOpcodes(INVOKE_DIRECT_EMPTY); } } diff --git a/smali/src/main/antlr3/org/jf/smali/smaliLexer.g b/smali/src/main/antlr3/org/jf/smali/smaliLexer.g index 882744b5..3d7949ee 100644 --- a/smali/src/main/antlr3/org/jf/smali/smaliLexer.g +++ b/smali/src/main/antlr3/org/jf/smali/smaliLexer.g @@ -717,6 +717,14 @@ INSTRUCTION_FORMAT41c_FIELD | 'sput-char/jumbo' | 'sput-short/jumbo'; +INSTRUCTION_FORMAT41c_FIELD_ODEX + : 'sget-volatile/jumbo' + | 'sget-wide-volatile/jumbo' + | 'sget-object-volatile/jumbo' + | 'sput-volatile/jumbo' + | 'sput-wide-volatile/jumbo' + | 'sput-object-volatile/jumbo'; + INSTRUCTION_FORMAT51l : 'const-wide'; @@ -740,6 +748,14 @@ INSTRUCTION_FORMAT52c_FIELD | 'iput-char/jumbo' | 'iput-short/jumbo'; +INSTRUCTION_FORMAT52c_FIELD_ODEX + : 'iget-volatile/jumbo' + | 'iget-wide-volatile/jumbo' + | 'iget-object-volatile/jumbo' + | 'iput-volatile/jumbo' + | 'iput-wide-volatile/jumbo' + | 'iput-object-volatile/jumbo'; + INSTRUCTION_FORMAT5rc_METHOD : 'invoke-virtual/jumbo' | 'invoke-super/jumbo' diff --git a/smali/src/main/antlr3/org/jf/smali/smaliParser.g b/smali/src/main/antlr3/org/jf/smali/smaliParser.g index acf6064c..1d957c59 100644 --- a/smali/src/main/antlr3/org/jf/smali/smaliParser.g +++ b/smali/src/main/antlr3/org/jf/smali/smaliParser.g @@ -857,6 +857,11 @@ instruction returns [int size] | //e.g. sget-object/jumbo v0, Ljava/lang/System;->out:Ljava/io/PrintStream; INSTRUCTION_FORMAT41c_FIELD REGISTER COMMA fully_qualified_field {$size = Format.Format41c.size;} -> ^(I_STATEMENT_FORMAT41c_FIELD[$start, "I_STATEMENT_FORMAT41c_FIELD"] INSTRUCTION_FORMAT41c_FIELD REGISTER fully_qualified_field) + | //e.g. sget-object-volatile/jumbo v0, Ljava/lang/System;->out:Ljava/io/PrintStream; + INSTRUCTION_FORMAT41c_FIELD_ODEX REGISTER COMMA fully_qualified_field {$size = Format.Format41c.size;} + { + throwOdexedInstructionException(input, $INSTRUCTION_FORMAT41c_FIELD_ODEX.text); + } | //e.g. const-wide v0, 5000000000L INSTRUCTION_FORMAT51l REGISTER COMMA fixed_literal {$size = Format.Format51l.size;} -> ^(I_STATEMENT_FORMAT51l[$start, "I_STATEMENT_FORMAT51l"] INSTRUCTION_FORMAT51l REGISTER fixed_literal) @@ -866,6 +871,11 @@ instruction returns [int size] | //e.g. iput-object/jumbo v1, v0 Lorg/jf/HelloWorld2/HelloWorld2;->helloWorld:Ljava/lang/String; INSTRUCTION_FORMAT52c_FIELD REGISTER COMMA REGISTER COMMA fully_qualified_field {$size = Format.Format52c.size;} -> ^(I_STATEMENT_FORMAT52c_FIELD[$start, "I_STATEMENT_FORMAT52c_FIELD"] INSTRUCTION_FORMAT52c_FIELD REGISTER REGISTER fully_qualified_field) + | //e.g. iput-object-volatile/jumbo v1, v0 Lorg/jf/HelloWorld2/HelloWorld2;->helloWorld:Ljava/lang/String; + INSTRUCTION_FORMAT52c_FIELD_ODEX REGISTER COMMA REGISTER COMMA fully_qualified_field {$size = Format.Format52c.size;} + { + throwOdexedInstructionException(input, $INSTRUCTION_FORMAT52c_FIELD_ODEX.text); + } | //e.g. invoke-virtual/jumbo {v25..v26}, Ljava/lang/StringBuilder;->append(Ljava/lang/String;)Ljava/lang/StringBuilder; INSTRUCTION_FORMAT5rc_METHOD OPEN_BRACE register_range CLOSE_BRACE COMMA fully_qualified_method {$size = Format.Format5rc.size;} -> ^(I_STATEMENT_FORMAT5rc_METHOD[$start, "I_STATEMENT_FORMAT5rc_METHOD"] INSTRUCTION_FORMAT5rc_METHOD register_range fully_qualified_method) diff --git a/smali/src/main/jflex/smaliLexer.flex b/smali/src/main/jflex/smaliLexer.flex index 9713916b..5fba1395 100644 --- a/smali/src/main/jflex/smaliLexer.flex +++ b/smali/src/main/jflex/smaliLexer.flex @@ -580,6 +580,11 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayDescriptor} return newToken(INSTRUCTION_FORMAT41c_FIELD); } + "sget-volatile/jumbo" | "sget-wide-volatile/jumbo" | "sget-object-volatile/jumbo" | "sput-volatile/jumbo" | + "sput-wide-volatile/jumbo" | "sput-object-volatile/jumbo" { + return newToken(INSTRUCTION_FORMAT41c_FIELD_ODEX); + } + "const-wide" { return newToken(INSTRUCTION_FORMAT51l); } @@ -594,6 +599,11 @@ Type = {PrimitiveType} | {ClassDescriptor} | {ArrayDescriptor} return newToken(INSTRUCTION_FORMAT52c_FIELD); } + "iget-volatile/jumbo" | "iget-wide-volatile/jumbo" | "iget-object-volatile/jumbo" | "iput-volatile/jumbo" | + "iput-wide-volatile/jumbo" | "iput-object-volatile/jumbo" { + return newToken(INSTRUCTION_FORMAT52c_FIELD_ODEX); + } + "invoke-virtual/jumbo" | "invoke-super/jumbo" | "invoke-direct/jumbo" | "invoke-static/jumbo" | "invoke-interface/jumbo" { return newToken(INSTRUCTION_FORMAT5rc_METHOD); diff --git a/smali/src/test/resources/LexerTest/InstructionTest.smali b/smali/src/test/resources/LexerTest/InstructionTest.smali index 47cc6d65..8b458342 100644 --- a/smali/src/test/resources/LexerTest/InstructionTest.smali +++ b/smali/src/test/resources/LexerTest/InstructionTest.smali @@ -265,4 +265,16 @@ invoke-direct/jumbo invoke-static/jumbo invoke-interface/jumbo filled-new-array/jumbo -invoke-object-init/jumbo
\ No newline at end of file +invoke-object-init/jumbo +iget-volatile/jumbo +iget-wide-volatile/jumbo +iget-object-volatile/jumbo +iput-volatile/jumbo +iput-wide-volatile/jumbo +iput-object-volatile/jumbo +sget-volatile/jumbo +sget-wide-volatile/jumbo +sget-object-volatile/jumbo +sput-volatile/jumbo +sput-wide-volatile/jumbo +sput-object-volatile/jumbo diff --git a/smali/src/test/resources/LexerTest/InstructionTest.tokens b/smali/src/test/resources/LexerTest/InstructionTest.tokens index 1de5aadc..457ceebd 100644 --- a/smali/src/test/resources/LexerTest/InstructionTest.tokens +++ b/smali/src/test/resources/LexerTest/InstructionTest.tokens @@ -265,4 +265,16 @@ INSTRUCTION_FORMAT5rc_METHOD("invoke-direct/jumbo") INSTRUCTION_FORMAT5rc_METHOD("invoke-static/jumbo") INSTRUCTION_FORMAT5rc_METHOD("invoke-interface/jumbo") INSTRUCTION_FORMAT5rc_TYPE("filled-new-array/jumbo") -INSTRUCTION_FORMAT5rc_METHOD_ODEX("invoke-object-init/jumbo")
\ No newline at end of file +INSTRUCTION_FORMAT5rc_METHOD_ODEX("invoke-object-init/jumbo") +INSTRUCTION_FORMAT52c_FIELD_ODEX("iget-volatile/jumbo") +INSTRUCTION_FORMAT52c_FIELD_ODEX("iget-wide-volatile/jumbo") +INSTRUCTION_FORMAT52c_FIELD_ODEX("iget-object-volatile/jumbo") +INSTRUCTION_FORMAT52c_FIELD_ODEX("iput-volatile/jumbo") +INSTRUCTION_FORMAT52c_FIELD_ODEX("iput-wide-volatile/jumbo") +INSTRUCTION_FORMAT52c_FIELD_ODEX("iput-object-volatile/jumbo") +INSTRUCTION_FORMAT41c_FIELD_ODEX("sget-volatile/jumbo") +INSTRUCTION_FORMAT41c_FIELD_ODEX("sget-wide-volatile/jumbo") +INSTRUCTION_FORMAT41c_FIELD_ODEX("sget-object-volatile/jumbo") +INSTRUCTION_FORMAT41c_FIELD_ODEX("sput-volatile/jumbo") +INSTRUCTION_FORMAT41c_FIELD_ODEX("sput-wide-volatile/jumbo") +INSTRUCTION_FORMAT41c_FIELD_ODEX("sput-object-volatile/jumbo") |