Что такое Smali Code Android

Я немного узнаю о Dalvik VM, dex и Smali.

Я читал о smali, но все еще не могу понять, где его место в цепочке компиляторов. И какова его цель.
Вот несколько вопросов:

  1. Как я знаю, dalvik, как и другие виртуальные машины, запускает байт-код, в случае Android это де-байтовый код.
  2. Что такое smali? ОС Android или Dalvik Vm работают с ним напрямую, или это один и тот же байт-код dex, но более читаемый для человека?
  3. Это что-то вроде дизассемблера для исполняемого файла Windows (например, OllyDbg), состоящего из кода разных машин (например, D3, 5F), и для каждого машинного кода имеется соответствующая команда сборки, но Dalvik Vm также является программным обеспечением, поэтому smali является читаемым представлением байткодов
  4. Существует новая среда для АРТ. Является ли он по-прежнему использовать байт-коды или он выполняет собственный код?

Заранее спасибо.

    Когда вы создаете код приложения, файл apk содержит файл .dex, который содержит двоичный байт-код Dalvik. Это формат, который платформа действительно понимает. Тем не менее, читать и изменять двоичный код непросто, поэтому есть инструменты для преобразования в понятное для пользователя представление и из него. Самый обычный читаемый для человека формат известен как Смали. Это по существу то же самое, что вы упомянули об этом.

    Например, скажем, у вас есть Java-код, который делает что-то вроде

    int x = 42 

    Предполагая, что это первая переменная, тогда код dex для метода, скорее всего, будет содержать шестнадцатеричную последовательность

     13 00 2A 00 

    Если вы запустите baksmali, вы получите текстовый файл, содержащий строку

     const/16 v0, 42 

    Это, очевидно, намного более читаемый, чем двоичный код. Но платформа не знает ничего о smali, это просто инструмент, облегчающий работу с байт-кодом.

    Dalvik и ART берут файлы .dex, содержащие байт-код dalvik. Это совершенно прозрачно для разработчика приложений, разница в том, что происходит за кулисами при установке и запуске приложения.