2015-06-15 30 views
7

Ho intenzione di imparare un po 'di Dalvik VM, dex e Smali.Che cos'è il codice Smali Android

Ho letto di smali, ma ancora non riesco a capire chiaramente dove sia il suo posto nella catena di compilatori. E quale è il suo scopo.
Ecco alcune domande:

  1. Per quanto ne so, Dalvik come altre macchine virtuali eseguite bytecode, in caso di Android è bytecode dex.
  2. Che cos'è smali? Android OS o Dalvik Vm funzionano direttamente con esso, oppure è lo stesso bytecode dex ma più leggibile per l'umano?
  3. E 'qualcosa come il programma eseguibile per Windows (come OllyDbg) consiste di codice macchina diverso (D3, 5F per esempio) e c'è un comando di assemblaggio appropriato per ogni codice macchina, ma Dalvik Vm è anche software, quindi è leggibile rappresentazione di bytecodes
  4. C'è un nuovo ambiente ART. È ancora utilizzato da bytecodes o esegue direttamente il codice nativo?

Grazie in anticipo.

risposta

17

Quando si crea un codice applicazione, il file apk contiene un file .dex, che contiene il bytecode binario Dalvik. Questo è il formato che la piattaforma in realtà comprende. Tuttavia, non è facile leggere o modificare il codice binario, quindi ci sono strumenti là fuori per convertire da una rappresentazione leggibile all'uomo. Il formato più leggibile dall'uomo è noto come Smali. Questo è essenzialmente lo stesso del dissimulatore che hai menzionato.

Per esempio, supponiamo di avere il codice Java che fa qualcosa di simile

int x = 42 

Supponendo che questo è la prima variabile, quindi il codice dex per il metodo molto probabilmente conterrà la sequenza esadecimale

13 00 2A 00 

Se esegui baksmali, otterrai un file di testo contenente la riga

const/16 v0, 42 

Che è ovviamente molto più leggibile del codice binario. Ma la piattaforma non sa nulla di smali, è solo uno strumento per semplificare il lavoro con il bytecode.

Dalvik e ART accettano entrambi file .dex contenenti bytecode dalvik. È completamente trasparente per lo sviluppatore dell'applicazione, l'unica differenza è ciò che accade dietro le quinte quando l'applicazione è installata ed eseguita.

+0

Puoi suggerire qualcosa da leggere per approfondire questo? È molto interessante per me – brqgddez

+1

Puoi vedere i dettagli del formato dex su https://source.android.com/devices/tech/dalvik/dex-format.html – Antimony

+0

Ma perché usare smali a tutti se abbiamo strumenti come decodificatore di jadx, che può ottenere molto più codice Java leggibile dall'uomo invece di smali? – JustAMartin