Sto cercando di imparare smali e ho alcune domande che non sono riuscito a trovare su google.In che modo DalvikVM gestisce lo switch e prova il codice smali
1) Ho creato un semplice banco di prova per spiegare meglio me stesso
const-string v1, "Start"
:try_start_0
const-string v1, "Try Block"
invoke-static {v1}, Lcom/example/test/Main;->print(Ljava/lang/String;)V
:try_end_0
.catchall {:try_start_0 .. :try_end_0} :catchall_0
La dichiarazione .catch: fa i due argomenti medie catturano da quell'etichetta a quell'etichetta e lo prende (il codice tra le due etichette) o significa iniziare ad eseguire la prova da: try_start_0 fino a raggiungere: try_end_0 (consente a un goto di saltare per eseguire codice non all'interno delle due etichette)?
Le etichette provano sempre nel formato try_start_% d o possono essere etichette?
2) Un altro caso
packed-switch v0, :pswitch_data_0
const-string v1, "Default Case"
invoke-static {v1}, Lcom/example/test/Main;->print(Ljava/lang/String;)V
:goto_0
const-string v1, "The End"
invoke-static {v1}, Lcom/example/test/Main;->print(Ljava/lang/String;)V
return-void
:pswitch_0
const-string v1, "Case 1"
invoke-static {v1}, Lcom/example/test/Main;->print(Ljava/lang/String;)V
goto :goto_0
:pswitch_data_0
.packed-switch 0x1
:pswitch_0
.end packed-switch
L'istruzione switch: C'è bisogno che le istruzioni switch si trovano tra i dati di interruttore e la chiamata switch? e anche di nuovo la denominazione delle etichette fissate o solo quella per comodità?
3) Se le etichette possono essere diverse, Baksmali potrebbe mai produrre codice smali con diverse etichette?
4) Quali sono le righe opzionali che non vengono sempre visualizzate quando si decompila un dex?
So che .parameter e .line sono facoltativi, ma quali sono tutti quelli che potrebbero non esserci?
Grazie in anticipo.
Grazie. Questo è esattamente quello che volevo sapere. Mi piace particolarmente la tua seconda costruzione "strana" :). So che il codice java compilato non sarà in grado di fornirlo, ma un programma di ottimizzazione sarebbe in grado di ottimizzare il codice in uno stato che non è realizzabile con il normale codice java (un po 'come goto C/C++ che consente "strano" flusso di controllo)? – Xonar
Un ottimizzatore, probabilmente no. Tuttavia, potrebbe essere più probabile da un offuscatore – JesusFreke