mirror of
https://github.com/revanced/smali.git
synced 2025-05-14 21:27:06 +02:00
Added support for Format22s
git-svn-id: https://smali.googlecode.com/svn/trunk@28 55b6fa8a-2a1e-11de-a435-ffa8d773f76a
This commit is contained in:
parent
a999b91230
commit
28f2923f80
@ -333,6 +333,15 @@ INSTRUCTION_FORMAT22c_TYPE_PHRASE
|
|||||||
REGISTER_EMIT
|
REGISTER_EMIT
|
||||||
WS? ',' WS?
|
WS? ',' WS?
|
||||||
FIELD_TYPE_DESCRIPTOR_EMITCHILD;
|
FIELD_TYPE_DESCRIPTOR_EMITCHILD;
|
||||||
|
|
||||||
|
INSTRUCTION_FORMAT22s_PHRASE
|
||||||
|
: INSTRUCTION_FORMAT22s_EMIT
|
||||||
|
WS
|
||||||
|
REGISTER_EMIT
|
||||||
|
WS? ',' WS?
|
||||||
|
REGISTER_EMIT
|
||||||
|
WS? ',' WS?
|
||||||
|
INTEGER_LITERAL_EMIT;
|
||||||
|
|
||||||
INSTRUCTION_FORMAT22t_PHRASE
|
INSTRUCTION_FORMAT22t_PHRASE
|
||||||
: INSTRUCTION_FORMAT22t_EMIT
|
: INSTRUCTION_FORMAT22t_EMIT
|
||||||
@ -867,8 +876,21 @@ fragment INSTRUCTION_FORMAT22c_TYPE
|
|||||||
: 'instance-of'
|
: 'instance-of'
|
||||||
| 'new-array';
|
| 'new-array';
|
||||||
|
|
||||||
|
fragment INSTRUCTION_FORMAT22s_EMIT
|
||||||
|
: INSTRUCTION_FORMAT22s {emit($INSTRUCTION_FORMAT22s, INSTRUCTION_FORMAT22s);};
|
||||||
|
fragment INSTRUCTION_FORMAT22s
|
||||||
|
: 'add-int/lit16'
|
||||||
|
| 'rsub-int'
|
||||||
|
| 'mul-int/lit16'
|
||||||
|
| 'div-int/lit16'
|
||||||
|
| 'rem-int/lit16'
|
||||||
|
| 'and-int/lit16'
|
||||||
|
| 'or-int/lit16'
|
||||||
|
| 'xor-int/lit16'
|
||||||
|
;
|
||||||
|
|
||||||
fragment INSTRUCTION_FORMAT22t_EMIT
|
fragment INSTRUCTION_FORMAT22t_EMIT
|
||||||
: INSTRUCTION_FORMAT22t {emit($INSTRUCTION_FORMAT22t, INSTRUCTION_FORMAT22t);};
|
: INSTRUCTION_FORMAT22t {emit($INSTRUCTION_FORMAT22t, INSTRUCTION_FORMAT22t);};
|
||||||
fragment INSTRUCTION_FORMAT22t
|
fragment INSTRUCTION_FORMAT22t
|
||||||
: 'if-eq'
|
: 'if-eq'
|
||||||
| 'if-ne'
|
| 'if-ne'
|
||||||
|
@ -66,6 +66,7 @@ tokens {
|
|||||||
I_STATEMENT_FORMAT22b;
|
I_STATEMENT_FORMAT22b;
|
||||||
I_STATEMENT_FORMAT22c_FIELD;
|
I_STATEMENT_FORMAT22c_FIELD;
|
||||||
I_STATEMENT_FORMAT22c_TYPE;
|
I_STATEMENT_FORMAT22c_TYPE;
|
||||||
|
I_STATEMENT_FORMAT22s;
|
||||||
I_STATEMENT_FORMAT22t;
|
I_STATEMENT_FORMAT22t;
|
||||||
I_STATEMENT_FORMAT22x;
|
I_STATEMENT_FORMAT22x;
|
||||||
I_STATEMENT_FORMAT23x;
|
I_STATEMENT_FORMAT23x;
|
||||||
@ -186,6 +187,9 @@ instruction returns [int size]
|
|||||||
| //e.g. instance-of v0, v1, Ljava/lang/String;
|
| //e.g. instance-of v0, v1, Ljava/lang/String;
|
||||||
INSTRUCTION_FORMAT22c_TYPE REGISTER REGISTER field_type_descriptor {$size = Format22c.Format.getByteCount();}
|
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)
|
-> ^(I_STATEMENT_FORMAT22c_TYPE[$start, "I_STATEMENT_FORMAT22c_TYPE"] INSTRUCTION_FORMAT22c_TYPE REGISTER REGISTER field_type_descriptor)
|
||||||
|
| //e.g. add-int/lit16 v0, v1, 12345
|
||||||
|
INSTRUCTION_FORMAT22s REGISTER REGISTER INTEGER_LITERAL {$size = Format22s.Format.getByteCount();}
|
||||||
|
-> ^(I_STATEMENT_FORMAT22s[$start, "I_STATEMENT_FORMAT22s"] INSTRUCTION_FORMAT22s REGISTER REGISTER INTEGER_LITERAL)
|
||||||
| //e.g. if-eq v0, v1, endloop:
|
| //e.g. if-eq v0, v1, endloop:
|
||||||
INSTRUCTION_FORMAT22t REGISTER REGISTER (LABEL | OFFSET) {$size = Format22t.Format.getByteCount();}
|
INSTRUCTION_FORMAT22t REGISTER REGISTER (LABEL | OFFSET) {$size = Format22t.Format.getByteCount();}
|
||||||
-> ^(I_STATEMENT_FORMAT22t[$start, "I_STATEMENT_FFORMAT22t"] INSTRUCTION_FORMAT22t REGISTER REGISTER LABEL? OFFSET?)
|
-> ^(I_STATEMENT_FORMAT22t[$start, "I_STATEMENT_FFORMAT22t"] INSTRUCTION_FORMAT22t REGISTER REGISTER LABEL? OFFSET?)
|
||||||
|
@ -493,6 +493,17 @@ instruction returns[Instruction instruction]
|
|||||||
|
|
||||||
$instruction = Format22c.Format.make(dexFile, opcode.value, regA, regB, typeIdItem);
|
$instruction = Format22c.Format.make(dexFile, opcode.value, regA, regB, typeIdItem);
|
||||||
}
|
}
|
||||||
|
| //e.g. add-int/lit16 v0, v1, 12345
|
||||||
|
^(I_STATEMENT_FORMAT22s INSTRUCTION_FORMAT22s registerA=REGISTER registerB=REGISTER INTEGER_LITERAL)
|
||||||
|
{
|
||||||
|
Opcode opcode = Opcode.getOpcodeByName($INSTRUCTION_FORMAT22s.text);
|
||||||
|
byte regA = parseRegister_nibble($registerA.text);
|
||||||
|
byte regB = parseRegister_nibble($registerB.text);
|
||||||
|
|
||||||
|
short litC = parseIntLiteral_short($INTEGER_LITERAL.text);
|
||||||
|
|
||||||
|
$instruction = Format22s.Format.make(dexFile, opcode.value, regA, regB, litC);
|
||||||
|
}
|
||||||
| //e.g. if-eq v0, v1, endloop:
|
| //e.g. if-eq v0, v1, endloop:
|
||||||
^(I_STATEMENT_FORMAT22t INSTRUCTION_FORMAT22t registerA=REGISTER registerB=REGISTER offset_or_label)
|
^(I_STATEMENT_FORMAT22t INSTRUCTION_FORMAT22t registerA=REGISTER registerB=REGISTER offset_or_label)
|
||||||
{
|
{
|
||||||
|
@ -30,6 +30,7 @@
|
|||||||
;20
|
;20
|
||||||
;1
|
;1
|
||||||
;Testing Format22t
|
;Testing Format22t
|
||||||
|
;20025
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -93,6 +94,19 @@ HERE:
|
|||||||
return-object v1
|
return-object v1
|
||||||
.end method
|
.end method
|
||||||
|
|
||||||
|
|
||||||
|
.method public testFormat22s()Ljava/lang/String;
|
||||||
|
.registers 2
|
||||||
|
const/16 v0, 25
|
||||||
|
|
||||||
|
add-int/lit16 v1, v0, 20000
|
||||||
|
|
||||||
|
invoke-static {v1}, java/lang/Integer/toString(I)Ljava/lang/String;
|
||||||
|
move-result-object v0
|
||||||
|
|
||||||
|
return-object v0
|
||||||
|
.end method
|
||||||
|
|
||||||
.method public testFormat21h()Ljava/lang/String;
|
.method public testFormat21h()Ljava/lang/String;
|
||||||
.registers 2
|
.registers 2
|
||||||
|
|
||||||
@ -173,6 +187,9 @@ skip:
|
|||||||
return-object v0
|
return-object v0
|
||||||
.end method
|
.end method
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
.method public onCreate(Landroid/os/Bundle;)V
|
.method public onCreate(Landroid/os/Bundle;)V
|
||||||
.registers 6
|
.registers 6
|
||||||
|
|
||||||
@ -438,6 +455,17 @@ skip:
|
|||||||
|
|
||||||
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
|
invoke-virtual {v2, v3}, java/lang/String/concat(Ljava/lang/String;)Ljava/lang/String;
|
||||||
move-result-object v2
|
move-result-object v2
|
||||||
|
|
||||||
|
|
||||||
|
;test format22s
|
||||||
|
invoke-virtual {v4}, org/JesusFreke/HelloWorld2/HelloWorld2/testFormat22s()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;
|
check-cast v4, Landroid/app/Activity;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user