Supposons que le code exemple suivantProblème avec le code Smali
public static int addition() {
int result = 1;
for(int i = 1; i < 10000 ; i++)
result = result + i;
}
et le code Smali correspondant (0002 est à côté du if-ge):
const/4 v0,#int 1
move v1,v0
const/16 v2,#int 10000
if-ge v0,v2,<0x0a>
add-int/2addr v1,v0
add-int/lit8 v0,v0,#int 1
goto <0002>
return v1
J'ai essayé de comprendre le Smali correspondant (assembly) code, mais est tombé sur une ligne qui n'a aucun sens pour moi en ce moment (marqué par ???). Si je ne me trompe pas, la valeur de v1 est augmentée à chaque tour par la valeur de v0, ce qui n'a aucun sens - premier tour: v1 = 2; deuxième tour v1 = 4 et ainsi de suite
put 1 into register v0 // v0 = 1
move value register v0 into v1 // v0 = 1 ; v1 = 1
put 10000 into register v2 // v0 = 1 ; v1 = 1 ; v2 = 10000
if v0 >= v2 goto 0x0a // v0 = 1 ; v1 = 1 ; v2 = 10000
v1 = v1 + v0 (???) // v0 = 1 ; v1 = 2 ; v2 = 10000
v0 = 1 + v0 // v0 = 2 ; v1 = 2 ; v2 = 10000
goto 0x02
return v1
Je suppose que je ne comprends pas l'une des lignes. Qu'est-ce que je fais mal?
Il serait correct que le code soit 'résultat = résultat + i; Peut-être une faute de frappe? –
@Nils: Pouvez-vous confirmer que c'était une faute de frappe? – user1354557
Ah, ouais, il y a une faute de frappe. Désolé pour ça. Je l'ai modifié ci-dessus. – Nils