From df00f6b8a883caf5a83db19850471f3fdfa2db3c Mon Sep 17 00:00:00 2001 From: Ben Gruver Date: Mon, 10 Oct 2011 00:55:17 -0400 Subject: [PATCH] Add support for assembling format 22c odex instructions --- smali/src/main/antlr3/org/jf/smali/smaliParser.g | 7 +++++-- smali/src/main/antlr3/org/jf/smali/smaliTreeWalker.g | 4 ++-- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/smali/src/main/antlr3/org/jf/smali/smaliParser.g b/smali/src/main/antlr3/org/jf/smali/smaliParser.g index 8fe6ba81..942b6ca6 100644 --- a/smali/src/main/antlr3/org/jf/smali/smaliParser.g +++ b/smali/src/main/antlr3/org/jf/smali/smaliParser.g @@ -738,10 +738,13 @@ instruction returns [int size] INSTRUCTION_FORMAT22c_FIELD REGISTER COMMA REGISTER COMMA fully_qualified_field {$size = Format.Format22c.size;} -> ^(I_STATEMENT_FORMAT22c_FIELD[$start, "I_STATEMENT_FORMAT22c_FIELD"] INSTRUCTION_FORMAT22c_FIELD REGISTER REGISTER fully_qualified_field) | //e.g. iput-object-volatile v1, v0 org/jf/HelloWorld2/HelloWorld2.helloWorld Ljava/lang/String; - INSTRUCTION_FORMAT22c_FIELD_ODEX REGISTER COMMA REGISTER COMMA fully_qualified_field + INSTRUCTION_FORMAT22c_FIELD_ODEX REGISTER COMMA REGISTER COMMA fully_qualified_field {$size = Format.Format22c.size;} { - throwOdexedInstructionException(input, $INSTRUCTION_FORMAT22c_FIELD_ODEX.text); + if (!allowOdex) { + throwOdexedInstructionException(input, $INSTRUCTION_FORMAT22c_FIELD_ODEX.text); + } } + -> ^(I_STATEMENT_FORMAT22c_FIELD[$start, "I_STATEMENT_FORMAT22c_FIELD"] INSTRUCTION_FORMAT22c_FIELD_ODEX REGISTER REGISTER fully_qualified_field) | //e.g. instance-of v0, v1, Ljava/lang/String; INSTRUCTION_FORMAT22c_TYPE REGISTER COMMA REGISTER COMMA nonvoid_type_descriptor {$size = Format.Format22c.size;} -> ^(I_STATEMENT_FORMAT22c_TYPE[$start, "I_STATEMENT_FORMAT22c_TYPE"] INSTRUCTION_FORMAT22c_TYPE REGISTER REGISTER nonvoid_type_descriptor) diff --git a/smali/src/main/antlr3/org/jf/smali/smaliTreeWalker.g b/smali/src/main/antlr3/org/jf/smali/smaliTreeWalker.g index 12ccde73..b6542ca3 100644 --- a/smali/src/main/antlr3/org/jf/smali/smaliTreeWalker.g +++ b/smali/src/main/antlr3/org/jf/smali/smaliTreeWalker.g @@ -1075,9 +1075,9 @@ instruction[int totalMethodRegisters, int methodParameterRegisters, List