web-dev-qa-db-fra.com

Qu'est-ce que Smali Code Android

Je vais en apprendre un peu plus sur Dalvik VM, dex et Smali.

J'ai lu sur smali, mais je n'arrive toujours pas à comprendre clairement où sa place dans la chaîne de compilateurs. Et quel est son but.
Voici quelques questions:

  1. Comme je le sais, dalvik comme les autres machines virtuelles exécutent le bytecode, dans le cas de Android c'est du code dex octet.
  2. Qu'est-ce que le smali? Android OS ou Dalvik Vm fonctionne-t-il directement avec lui, ou est-il juste le même bytecode dex mais plus lisible pour l'humain?
  3. Est-ce quelque chose comme un exécutable de programme dissasembler pour Windows (comme OllyDbg) composé de différents codes de machines (D3, 5F par exemple) et il existe une commande d'assemblage appropriée pour chaque code machine, mais Dalvik Vm est également un logiciel, donc smali est une représentation lisible des bytecodes
  4. Il y a un nouvel environnement ART. Utilise-t-il toujours des bytecodes ou exécute-t-il directement du code natif?

Merci d'avance.

25
user4598738

Lorsque vous créez un code d'application, le fichier apk contient un fichier .dex, qui contient le bytecode Dalvik binaire. C'est le format que la plateforme comprend réellement. Cependant, il n'est pas facile de lire ou de modifier du code binaire, il existe donc des outils pour convertir vers et depuis une représentation lisible par l'homme. Le format lisible par l'homme le plus courant est appelé Smali. C'est essentiellement le même que le dissembleur que vous avez mentionné.

Par exemple, disons que vous avez Java code qui fait quelque chose comme

int x = 42

En supposant qu'il s'agit de la première variable, le code dex de la méthode contiendra très probablement la séquence hexadécimale

13 00 2A 00

Si vous exécutez baksmali dessus, vous obtiendrez un fichier texte contenant la ligne

const/16 v0, 42

Ce qui est évidemment beaucoup plus lisible que le code binaire. Mais la plateforme ne sait rien de smali, c'est juste un outil pour faciliter le travail avec le bytecode.

Dalvik et ART prennent tous les deux des fichiers .dex contenant le bytecode dalvik. Il est complètement transparent pour le développeur de l'application, la seule différence est ce qui se passe dans les coulisses lorsque l'application est installée et exécutée.

39
Antimony