高水準言語プログラミングには、プログラミングを容易にし、プログラマーの時間を節約するための追加ツールが含まれています。プログラムをコンパイルした後、逆コンパイルする場合、元のソース コードに戻るには、プログラム コードの構造とフローを決定するために、多くのコード分析が必要になります。次に、逆コンパイラは、コードをコンパイルしたコンパイラの機能、バージョンまたはコンパイラ、およびコンパイルされたオペレーティングシステムに基づいてソースを構造化する必要があります。OS 固有の機能、フレームワーク、パーサー、または外部ライブラリ (.net や dome.dll など) とそれらのバージョンなどが関係していた場合
次善の策は、ソース コードが 1 つの大きなファイルに記述されているかのように、プログラム フロー全体を出力することです。個別のオブジェクト、ライブラリ、依存関係、継承、クラス、API はありません。これは、他のファイル/依存関係のソースコードと構造にアクセスできないため、コンパイル時にエラーが発生するコードを逆コンパイラが吐き出す場所です。こちらの例を参照してください。
3番目の最良のオプションは、プログラムされた命令に基づいてオペレーティングシステムが実行していることに従うことです。これは、マシンコードまたはdex(Androidの場合)です。Morpheus が指揮する Nebuchadnezzar に座っていて、プロセッサが実行しているアーキテクチャの命令セット内のすべてのオペコードをデコードする時間がない場合を除き、監視中に画面上をスクロールする Unicode 文字よりも読みやすいものが必要になるでしょう。プログラムの流れ/実行。
ここで、アセンブリ コードが違いを生みます。これは、機械コードを人間が読める形式にほぼ直接翻訳したものです。マイクロプロセッサには、マイクロコード、パイプライン用のマルチスレッダー、ハードウェアアクセラレータなどのヘルパーがあり、ユーザーエクスペリエンスを向上させるため、「ほぼ」直接と言います。
ソース コードがある場合は、コードが記述されている言語で編集することになります。同様に、ソース コードがなく、コンパイルされたアプリを編集している場合でも、コードが記述されている言語で編集することになります。この場合、それはマシン コード、または次善の策: smaliです。
これは、「Dalvik VM、dex、および Smali」と「コンパイラのチェーンにおけるその位置」を示す図です。
