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ファイル間の変換関係です。
画像
なぜスマリを学ぶのですか?
逆コンパイルして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
次の結果が表示されます。
foo.apkを実行します.dexファイルを.smaliファイルに変換します
ここでは、ツールsmali.jarを使用する必要があります。 クリックしてダウンロード
.smaliファイルを変換する