Smali分析とdex、java相互変換



Smali Analysis Dex



今日、ホットフィックスを見ると、テキストで何度もsmaliファイルについて言及しました。スマリとは何かを簡単に理解したいと思います。

Smaliファイルとは何ですか?

AndroidプログラマーはJavaでアプリを開発し、コンパイラーはJavaソースファイル(.java)をDalvik実行可能ファイル(.dex)にコンパイルします。このファイルは、Android上のDalvik仮想マシンによって実行されます。 Smali / baksmaliは、DalvikVM実行可能ファイルのアセンブラー/逆アセンブラーです。 Dalvik実行可能ファイル(.dex)を分解すると、.smaliサフィックスファイルが取得されます。 smaliコードには特定の構文があります。
smaliファイルの構文は、.dexファイルよりも理解しやすいです。以下は、.dexファイル、.smaliファイル、および.javaファイル間の変換関係です。



4287000-90c51e742497c47b画像

なぜスマリを学ぶのですか?

逆コンパイルしてjarまたはsmaliファイルを取得すると、androidはjava言語開発を使用しますが、androidシステムは独自のdalvik仮想マシンを使用し、コードコンパイルはjavaクラスを使用せず、smaliを使用します。したがって、コードを逆コンパイルします。jarは多くの場所で正しく説明できません。smaliを逆コンパイルすると、プログラムの意味を正しく理解できるため、smaliを学習する必要があります。

.javaファイルを.dexファイルに変換し、DalvikVMで.dexファイルを実行します

Javaファイルを作成する

public class Foo{ public static void main(String [] args){ System.out.println('Hello, world!haha') } }

.javaを.classファイルに変換します

javac Foo.java

.classを.dexファイルに変換します。デバイスにインストールする必要があるため、.apkファイルに直接変換します。

ここでは、sdk / build-tool /のdxツールを使用する必要があります



dx --dex --output=foo.apk Foo.class

デバイスにインストールされています

adb push foo.apk /sdcard/

DalvikVMを呼び出してfoo.apkを実行します

adb shell dalvikvm -cp /sdcard/foo.apk Foo

次の結果が表示されます。

4287000-3f68a034eb206e08foo.apkを実行します

.dexファイルを.smaliファイルに変換します

ここでは、ツールsmali.jarを使用する必要があります。 クリックしてダウンロード

4287000-658c1d1ce5a03253.smaliファイルを変換する

.smaliファイルを.dexファイルに変換します

4287000-94e11668389f905d.smaliファイルを変換する