, (OTOH, копию netmite легче читать, чем копию в репозитории git, потому что присутствует страница CSS.)

аю сСмали и Баксмали на небольшом приложении Hello World Android, которое я написал. Мой исходный код:

package com.hello;

import android.app.Activity;
import android.os.Bundle;

public class Main extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
    }
}

который затем был разобран на:

.class public Lcom/hello/Main;
.super Landroid/app/Activity;
.source "Main.java"


# direct methods
.method public constructor <init>()V
    .locals 0

    .prologue
    .line 6
    invoke-direct {p0}, Landroid/app/Activity;-><init>()V

    return-void
.end method


# virtual methods
.method public onCreate(Landroid/os/Bundle;)V
    .locals 1
    .parameter "savedInstanceState"

    .prologue
    .line 10
    invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V

    .line 11
    const/high16 v0, 0x7f03

    invoke-virtual {p0, v0}, Lcom/hello/Main;->setContentView(I)V

    .line 12
    return-void
.end method

Я понимаю, что это какое-то промежуточное представительство, но я не уверен, что это такое. Как я понимаю, должна быть некоторая спецификация о том, как понимать это представление, но я не могу понять, как его искать. Таким образом, учитывая файл apk, кто-то может объяснить в непрофессионале о том, какСпецификация кода операции Dalvik используется, чтобы прийти к этому представлению? Мое нынешнее понимание таково:

Имея APK, я могу извлечь AndroidManifest.xml в двоичном формате XML и использовать такой инструмент, какaxml2xml.pl чтобы получить "текстовую" версию манифеста, которая не является полной или я мог бы использоватьapktool чтобы получить более читаемую форму. Но я все еще не уверен, какую спецификацию они используют для преобразования двоичного XML в текст.Дизассемблерыкак-то используя спецификацию кода операции Dalvil для чтения файлов dex и преобразования их в вышеприведенное представление.

Любая информация (возможно, с некоторыми простыми примерами) о двух вышеупомянутых шагах очень поможет мне в правильном понимании концепций.

Обновление 1 (опубликовано после ответа Криса):

По сути, я бы сделал следующее, чтобы получить байт-код Dalvik:

Возьмите apk и распакуйте его, чтобы получить файлы classes.dex.

Затем дизассемблер читает файл classes.dex и определяет все классы, присутствующие в apk. Можете ли вы дать мне некоторую информацию о том, как это делается? Он анализирует файл в шестнадцатеричном режиме и ищет спецификацию Dalvik, а затем разрешает соответствующим образом? Или что-то еще происходит? Например, когда я использовал hexdump на classes.dex, он дал мне что-то вроде этого:

64 65 78 0a 30 33 ...

Используются ли они сейчас для поиска кода операции?

Предполагая, что инструмент смог разделить входящий байт-код на отдельные классы, он затем продолжает сканировать шестнадцатеричные коды из файла classes.dex и использует спецификацию Davlik для вывода соответствующего имени кода операции из таблицы?

На самом деле, короче говоря, мне интересно знать, как делается вся эта «магия». Так, например, если бы я научился писать этот инструмент, какой дорожной карте высокого уровня я должен придерживаться?

Ответы на вопрос(1)

Ваш ответ на вопрос