mirror of
https://github.com/revanced/smali.git
synced 2025-05-23 18:16:23 +02:00
Added support for Format22t
git-svn-id: https://smali.googlecode.com/svn/trunk@27 55b6fa8a-2a1e-11de-a435-ffa8d773f76a
This commit is contained in:
parent
eb4521d6c7
commit
a999b91230
@ -332,7 +332,16 @@ INSTRUCTION_FORMAT22c_TYPE_PHRASE
|
||||
WS? ',' WS?
|
||||
REGISTER_EMIT
|
||||
WS? ',' WS?
|
||||
FIELD_TYPE_DESCRIPTOR_EMITCHILD;
|
||||
FIELD_TYPE_DESCRIPTOR_EMITCHILD;
|
||||
|
||||
INSTRUCTION_FORMAT22t_PHRASE
|
||||
: INSTRUCTION_FORMAT22t_EMIT
|
||||
WS
|
||||
REGISTER_EMIT
|
||||
WS? ',' WS?
|
||||
REGISTER_EMIT
|
||||
WS? ',' WS?
|
||||
(LABEL_EMIT | OFFSET_EMIT);
|
||||
|
||||
INSTRUCTION_FORMAT22x_PHRASE
|
||||
: INSTRUCTION_FORMAT22x_EMIT
|
||||
@ -858,6 +867,17 @@ fragment INSTRUCTION_FORMAT22c_TYPE
|
||||
: 'instance-of'
|
||||
| 'new-array';
|
||||
|
||||
fragment INSTRUCTION_FORMAT22t_EMIT
|
||||
: INSTRUCTION_FORMAT22t {emit($INSTRUCTION_FORMAT22t, INSTRUCTION_FORMAT22t);};
|
||||
fragment INSTRUCTION_FORMAT22t
|
||||
: 'if-eq'
|
||||
| 'if-ne'
|
||||
| 'if-lt'
|
||||
| 'if-ge'
|
||||
| 'if-gt'
|
||||
| 'if-le'
|
||||
;
|
||||
|
||||
fragment INSTRUCTION_FORMAT22x_EMIT
|
||||
: INSTRUCTION_FORMAT22x {emit($INSTRUCTION_FORMAT22x, INSTRUCTION_FORMAT22x);};
|
||||
fragment INSTRUCTION_FORMAT22x
|
||||
|
@ -66,6 +66,7 @@ tokens {
|
||||
I_STATEMENT_FORMAT22b;
|
||||
I_STATEMENT_FORMAT22c_FIELD;
|
||||
I_STATEMENT_FORMAT22c_TYPE;
|
||||
I_STATEMENT_FORMAT22t;
|
||||
I_STATEMENT_FORMAT22x;
|
||||
I_STATEMENT_FORMAT23x;
|
||||
I_STATEMENT_FORMAT30t;
|
||||
@ -185,6 +186,9 @@ instruction returns [int size]
|
||||
| //e.g. instance-of v0, v1, Ljava/lang/String;
|
||||
INSTRUCTION_FORMAT22c_TYPE REGISTER REGISTER field_type_descriptor {$size = Format22c.Format.getByteCount();}
|
||||
-> ^(I_STATEMENT_FORMAT22c_TYPE[$start, "I_STATEMENT_FORMAT22c_TYPE"] INSTRUCTION_FORMAT22c_TYPE REGISTER REGISTER field_type_descriptor)
|
||||
| //e.g. if-eq v0, v1, endloop:
|
||||
INSTRUCTION_FORMAT22t REGISTER REGISTER (LABEL | OFFSET) {$size = Format22t.Format.getByteCount();}
|
||||
-> ^(I_STATEMENT_FORMAT22t[$start, "I_STATEMENT_FFORMAT22t"] INSTRUCTION_FORMAT22t REGISTER REGISTER LABEL? OFFSET?)
|
||||
| //e.g. move/from16 v1, v1234
|
||||
INSTRUCTION_FORMAT22x REGISTER REGISTER {$size = Format22x.Format.getByteCount();}
|
||||
-> ^(I_STATEMENT_FORMAT22x[$start, "I_STATEMENT_FORMAT22x"] INSTRUCTION_FORMAT22x REGISTER REGISTER)
|
||||
|
@ -493,6 +493,22 @@ instruction returns[Instruction instruction]
|
||||
|
||||
$instruction = Format22c.Format.make(dexFile, opcode.value, regA, regB, typeIdItem);
|
||||
}
|
||||
| //e.g. if-eq v0, v1, endloop:
|
||||
^(I_STATEMENT_FORMAT22t INSTRUCTION_FORMAT22t registerA=REGISTER registerB=REGISTER offset_or_label)
|
||||
{
|
||||
Opcode opcode = Opcode.getOpcodeByName($INSTRUCTION_FORMAT22t.text);
|
||||
byte regA = parseRegister_nibble($registerA.text);
|
||||
byte regB = parseRegister_nibble($registerB.text);
|
||||
|
||||
int addressOffset = $offset_or_label.offsetValue;
|
||||
|
||||
if (addressOffset < Short.MIN_VALUE || addressOffset > Short.MAX_VALUE) {
|
||||
//TODO: throw correct exception type
|
||||
throw new RuntimeException("The offset/label is out of range. The offset is " + Integer.toString(addressOffset) + " and the range for this opcode is [-32768, 32767].");
|
||||
}
|
||||
|
||||
$instruction = Format22t.Format.make(dexFile, opcode.value, regA, regB, (short)addressOffset);
|
||||
}
|
||||
| //e.g. move/from16 v1, v1234
|
||||
^(I_STATEMENT_FORMAT22x INSTRUCTION_FORMAT22x registerA=REGISTER registerB=REGISTER)
|
||||
{
|
||||
|
@ -29,6 +29,7 @@
|
||||
;-1
|
||||
;20
|
||||
;1
|
||||
;Testing Format22t
|
||||
|
||||
|
||||
|
||||
@ -155,6 +156,23 @@ HERE:
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
.method public testFormat22t()Ljava/lang/String;
|
||||
.registers 3
|
||||
|
||||
const/16 v1, 1
|
||||
const/16 v2, 1
|
||||
|
||||
if-eq v1, v2, skip:
|
||||
|
||||
const-string v0, "This shouldn't be displayed!"
|
||||
return-object v0
|
||||
|
||||
skip:
|
||||
|
||||
const-string v0, "Testing Format22t"
|
||||
return-object v0
|
||||
.end method
|
||||
|
||||
.method public onCreate(Landroid/os/Bundle;)V
|
||||
.registers 6
|
||||
|
||||
@ -411,6 +429,15 @@ HERE:
|
||||
move-result-object v2
|
||||
|
||||
|
||||
;test format22t
|
||||
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testFormat22t()Ljava/lang/String;
|
||||
move-result-object v1
|
||||
|
||||
invoke-virtual {v2, v1}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
|
||||
move-result-object v2
|
||||
|
||||
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
|
||||
move-result-object v2
|
||||
|
||||
|
||||
check-cast v4, Landroid/app/Activity;
|
||||
|
Loading…
x
Reference in New Issue
Block a user