Dalvik Cache что это
Объем встроенной памяти на телефонах с ОС Андроид по факту отличается от заявленного производителем, ведь в нем находится операционная система и установочные элементы. Частым вопросом пользователем является: «Dalvik Cache что это, и зачем он нужен?».
Что это такое
Dalvik Cache – это одно из мест, где хранится определенный вид файлов, которые сохраняются на телефоне. Проще говоря – это временно скомпилированные элементы.
Откуда он появился на телефоне
Информация в папке Далвик кеш появляются после работы виртуальной машины ОС Android с одноименным названием. Сами элементы внутри остаются от использования программ. Бывают как остаточными элементами, так и действующими.
Существует находится 3 типа кэш-памяти:
Файлы со временем начинают занимать значительную часть памяти, впоследствии чего возникает проблема с наличием свободного места.
Варианты очистки
Известно четыре метода очистки встроенной памяти от кэш-данных на телефоне:
Использование внутренних инструментов
Каждый владелец устройства ОС Андроид имеет возможность удалить информацию полностью через встроенные инструменты.
Для этого потребуется:
В способе нет возможности гибкой настройки режима удаления.
Очистка в приложениях
Не обязательно полностью чистить информацию на всем телефоне. Есть возможность удалить файлы из конкретных приложений.
Подобным образом очищается кэш приложения.
Очистка через Recovery
Очистка Dalvik Cache возможна только в режиме Recovery. Для перехода зажимается соответствующую комбинацию клавиш, в зависимости от модели смартфона.
Базовая комбинация — одновременное зажатие кнопок регулировки звука и выключения телефона.
Как итог
С помощью указанных способов удаляет кэш со смартфона в папке Dalvik Cache. Также можно установить из Play Market любую утилиту, которая сама проанализирует файлы, и предложит варианты удаления.
ART и Dalvik: Как оно работает
Внутри последней итерации операционной системы Android нашлось место для многих изменений и усовершенствований. Большинство из них сразу же бросается в глаза даже рядовому пользователю данной системы. Это, конечно же, установка в качестве стандартного месседжера приложения Hangouts, переделанное меню набора номеров и добавление клавиатуры Emoji. Бывалые же приверженцы Android наверняка ощутят прилив производительности в сравнении с более старыми ее релизами. Однако не обошлось и без скрытых сторон, которые, согласно логике, должны представлять интерес лишь для разработчиков. Впрочем, значимость одного из подобных нововведений особенно велика. Кроме того, вскоре оно коснется каждого из нас, а потому умолчать о его подробностях было бы просто преступлением.
Наверное, многие из вас хотя бы краем уха слышали о том, что в Android KitKat появился особый режим. Суть его заключается в более быстром запуске приложений и в более стабильном и плавном их выполнении. Возможно, попытки разобраться в данном вопросе самостоятельно не были увенчаны успехом. Оно и неудивительно: слова «виртуальная машина» и «компиляция» способны испугать кого-угодно, особенно, если информация потребляется из англоязычного источника. Для решения данной проблемы мы решили разобраться в сути вопроса самостоятельно, изложив его в максимально доступном виде.
Немного базовых понятий
Прежде чем ознакомиться с сутью нововведения, необходимо получить представление о некоторых деталях. Первая из них — среда выполнения приложений. Говоря простым языком, пресловутое понятие является сборником инструкций, которые выполняются во время работы того или иного приложения. Инструкции, в свою очередь, осуществляют перевод программного кода в код, который в состоянии запустить система. Соответственно, абсолютно все компьютерные языки нуждаются в определенной среде выполнения ради запуска приложений, написанных на них.
В качестве среды выполнения в нашей любимой операционной системе Android используются виртуальные машины, первая из которых — Dalvik — заработала еще в далеком 2007 году. Именно ей мы и обязаны периодическими зависаниями интерфейса и порой медлительными запусками приложений. Впрочем, данная проблема уже скоро может стать частью истории.
Почему именно виртуальные машины?
Данный тип среды выполнения имеет два безоговорочных плюса, которые облегчают жизнь не только разработчикам, но и нам, пользователям. Первое достоинство — защита системы. Виртуальная машина неслучайно называется виртуальной: ее работа абсолютно изолирована от операционной системы. Соответственно, ошибка или банальное зависание никак не скажется на работоспособности вашего устройства.
Второй плюс — кросплатформенность. Виртуальная машина сможет запустить приложение, даже если оно создано на PC.
Преимущества и недостатки Dalvik
Dalvik, как и все в этом мире, неидеальна. Причиной периодических подергиваний интерфейса является тип преобразования кода приложения в аппаратный. Данная машина проделывает это в прямом эфире, а называется такой тип компиляции Just-In-Time. Соответственно, предугадать появление багов практически невозможно, поскольку подобное может произойти в любой момент. Особенно велика вероятность подобного во время первого запуска, когда часть преобразованного кода даже не сохранена в кеше.
Проблема медлительности первого запуска, кстати, вовсе не случайна. Подобное происходит из-за того, что системе необходимо собрать воедино все необходимые для запуска приложения файлы и загрузить ими оперативную память. В конкретном случае больше всего страдают устройства с малым количеством оперативной памяти, для которых процесс загрузки чреват если не вылетом приложения, то хотя бы заметными задержками его выполнения.
Компиляция «на ходу» значительно нагружает процессор, однако одновременно с этим позволяет разработчикам не заниматься оптимизацией кода для каждого отдельного процессора и прочих составляющих устройства.
Исправить вышесказанное призвана новая виртуальная машина, которая успела отметиться далеко не самым замысловатым названием — Android Runtime. Или же сокращенно — ART.
Преимущества и недостатки ART
Новая виртуальная машина обрела жизнь вместе с Android 4.4 KitKat, однако на презентации ей не уделили должного внимания. Причиной этого является то, что ART все еще находится на экспериментальной стадии. Впрочем, хотя и Dalvik используется в качестве машины по умолчанию, переключиться на Android Runtime можно уже сейчас.
Однако не спешите это делать. Сначала необходимо ознакомиться с особенностям новой версии.
Наиболее заметным преимуществом ART является новый тип компиляции, который получил название Ahead-Of-Time. Читатели, знающие английский язык, наверняка сразу же догадались, в чем дело. А дело в том, что процесс преобразования кода в новой версии осуществляется до запуска приложения — еще во время установки. Соответственно, сразу же вырисовываются несколько минусов, о которых, справедливости ради, стоит упомянуть. Это, во-первых, более длительный процесс установки, а во-вторых, больший объем конечного размера приложения. Еще один недостаток является следствием незрелости ART: виртуальная машина на данный момент работает далеко не со всеми приложениями.
Впрочем, список заслуг куда более значимый. Это, к примеру, более плавная работа интерфейса и более быстрая загрузка приложений. Кроме того, поскольку процесс компиляции осуществляется лишь единожды, он не будет в дальнейшем нагружать процессор, что станет причиной улучшенной автономности устройства.
Переключиться на виртуальную машину ART в меню разработчика могут владельцы устройств под управлением Android 4.4 с процессором Snapdragon.
Развитие данной технологии имеет огромный потенциал. На карте стоит развенчание мифа о медлительности и нестабильности Android, что не только порадует владельцев устройств под ее управлением, но и ликвидирует наиболее серьезный аргумент в спорах со стороны приверженцев iOS.
На данный момент представители компании Google не сообщают о сроках окончательного внедрения и замены Dalvik на ART. Хочется верить, что это произойдет уже очень скоро.
Android изнутри: сравнение Dalvik и ART
Привет, Хабр! Около полугода назад я публиковал подробный «гайд» по JVM. Пост, в целом, зашел, а в комментариях спросили, не планируется ли “чего-то по андроиду”. Наконец, у меня дошли руки.
В этом посте поговорим о среде выполнения в Android. В частности, я постараюсь кратко, но емко изложить, чем отличается ART и Dalvik, и как со временем улучшились средства разработки в Android. Тема явно не новая, но, надеюсь, придется кстати тем, кто только начинает вникать. Кому интересно — добро пожаловать под кат.
Виртуальная машина
Сначала, давайте разберемся чем отличается JVM от DVM.
Java Virtual Machine — виртуальная машина, способная выполнять байт-код Java независимо от базовой платформы. Она опирается на принцип “Write once, run anywhere”. Байт-код Java может быть запущен на любой машине, способной поддерживать JVM.
Можно сказать, что Dalvik — это среда для выполнения компонентов операционной системы Android и пользовательских приложений. Каждый процесс выполняется в своём, изолированном адресном пространстве. Когда пользователь запускает приложение (либо операционная система запускает один из своих компонентов), ядро виртуальной машины Dalvik (Zygote Dalvik VM) создает отдельный, защищенный процесс в общей памяти, в котором непосредственно разворачивается VM, как среда для запуска приложения. Другими словами, изнутри Android выглядит как набор виртуальных машин Dalvik, в каждой из которых исполняется приложение.
Подробно об архитектуре DVM можно почитать тут.
Android Dexer
Изначально, class-файлы преобразовывались в dex-файлы с помощью встроенного DX-компилятора. Но начиная с Android Studio 3.1 и далее, компилятором по умолчанию стал D8. По сравнению с DX-компилятором, D8 компилирует быстрее и выводит dex-файлы меньшие по размеру, при этом обеспечивая более высокую производительность приложения во время исполнения. Полученный таким образом байт-код dex подвергается минификации с помощью open-source утилиты ProGuard. В итоге, мы получаем тот же dex-файл, но только меньше. Далее этот dex-файл используется для сборки apk и, наконец, для развертывания на устройстве Android.
Но следом за D8 в 2018 году пришел R8, который, по сути, является тем же D8, только с дополнениями.
При работе с Android Studio 3.4 и Android Gradle 3.4.0 plugin или выше, Proguard больше не используется для оптимизации кода во время компиляции. Вместо этого плагин работает по умолчанию с R8, который сам выполняет Code shrinking, Optimisation и Obfuscation. Хотя R8 предлагает только подмножество функций, предоставляемых Proguard, он позволяет совершить процесс преобразования Java байт-кода в dex-байт-код единоразово, что еще больше сокращает время сборки.
R8 и сокращение кода
Как правило, приложения используют сторонние библиотеки, такие как Jetpack, Gson, Google Play Services. Когда мы используем одну из этих библиотек, часто в приложении используется только малая часть каждой отдельной библиотеки. Без Code shrinking, весь код библиотеки сохраняется в вашем приложении.
Бывает так, что для улучшения читаемости и удобства поддержки приложения разработчики используют подробный код. Например, могут быть использованы значимые имена переменных и шаблон проектирования для того, чтобы другим было удобнее разобраться в коде. Но шаблоны, как правило, приводят к бОльшему объему кода, чем это необходимо.
В этом случае R8 приходит на помощь. Он позволяет существенно уменьшить размер приложения, оптимизируя размер даже того кода, который действительно используется приложением.
В качестве примера, ниже преведены цифры из доклада Shrinking Your App with R8, который был представлен на Android Dev Summit ’19:
А вот так выглядело сравнение эффективности R8 на этапе выпуска бета-версии (взято из источника Android Developers Blog):
Детальнее можно ознакомиться в оф документации и докладе.
ART vs DVM в Android
DVM была спроектирована именно для мобильных устройств и использовалась как виртуальная
машина для запуска андроид приложений вплоть до Android 4.4 Kitkat.
Начиная с этой версии, ART был представлен как среда выполнения, а в Android 5.0 (Lollipop) ART полностью заменил Dalvik.
Основное явное отличие ART от DVM состоит в том, что ART использует AOT компиляцию, а DVM — JIT компиляцию. Не так давно ART начал использовать гибрид AOT и JIT. Далее разберем это чуть подробнее.
И небольшая схема Dalvik vs ART:
JIT + AOT в ART
Среда выполнения Android (ART), начиная с Android 7, включает компилятор JIT с профилированием кода. JIT-компилятор дополняет AOT компилятор и повышает производительность во время выполнения, экономит место на диске и ускоряет обновления приложений и системы.
Происходит это по следующей схеме:
Вместо того, чтобы запускать AOT-компиляцию каждого приложения на этапе установки, он запускает приложение под управлением виртуальной машины, используя JIT-компилятор (почти так же, как в Android
Что такое Виртуальная машина Dalvik (Dalvik VM)
Не секрет что, приложения под платформу Android представляют из себя программы для виртуальной машины Dalvik. О Dalvik VM мы и поговорим в этой статье.
Dalvik Virtual Machine является необходимой частью мобильной платформы Андроид. Это виртуальная машина, разработчиком которой является Dan Bornstein. Dalvik VM распространяется как свободное программное обеспечение под GPL-совместимой лицензией Apache 2.0. Во многом именно этот фактор сыграл свою важную роль в решении Гугл отказаться от JME (Java Micro Edition), на которую нужно было получать лицензию от Sun. Поэтому корпорация, главной целью которой была разработка открытой операционной системы, создала свою собственную виртуальную машину.
В отличие от многих виртуальных машин например (той же Java Virtual Machine), которые являются стек-ориентированными, Dalvik является регистр-ориентированной, что никак нельзя назвать типовым решением. Но с другой стороны, она очень хорошо подходит для работы на процессорах RISC-архитектуры, к которым относятся и процессоры ARM, широко применяемые в мобильных устройствах.
Dalvik задумывалась специально под платформу Андроид. Учитывался тот фактор, что платформа представляет все свои процессы как изолированные, выполняющиеся каждый в своём адресном пространстве. Виртуальная машина была оптимизирована для небольшого потребления памяти и работы на мобильном аппаратном обеспечении. Начиная с версии Android 2.2., Dalvik использует JIT (just-in-time) компиляцию. В результате таких особенностей, получилась очень быстрая и производительная виртуальная машина, что конечно же не может не сказываться на работе приложений в целом.
Dalvik Virtual Machine использует свой собственный байт-код. При разработке приложения под Android переводятся компилятором в специальный машинно-независимый низкоуровневый код. При выполнении на платформе именно Dalvik Virtual Machine интерпретирует и выполняет такую программу.
Русские Блоги
Closer Look At Android Runtime: DVM vs ART
В статье выше просто сравнивается Dalvik и Art. Некоторые из этих деталей также упоминаются в другой моей статье «Говоря о компиляторе Ark», так что вы можете просмотреть ее.
Затем я рекомендую выполнить анализ формата файла Android reverse note-DEX, в конце DexCode Иногда проводится подробный анализ байт-кода Dalvik побайтно. Вы можете выбрать этот абзац и прочитать его, чтобы получить общее представление о байт-коде Dalvik.
Теперь давайте официально войдем в мир Dalvik.
Виртуальная машина Dalvik
Dalvik интерпретируется и выполняется плюс JIT. Каждый раз, когда приложение запускается, оно динамически преобразует часть байт-кода Dalvik.
Интерпретируется как машинный код. По мере запуска приложения больше байт-кода компилируется и кэшируется. Поскольку JIT компилирует только часть кода, она занимает меньше места в памяти и занимает меньше места на устройстве. Однако выполнение при объяснении неэффективно, поэтому от Dalvik позже отказались.
Dalvik и JVM
Dalvik и JVM несовместимы, и можно даже сказать, что это полностью два набора механизмов. Вот несколько отличий между ними.
Все мы знаем, что JVM (виртуальная машина Java) распознает файл класса.Я уже писал подробное объяснение формата файла класса ранее, подробно описывая двоичную структуру файла класса. JVM запускает байт-код Java, а Dalvik запускает байт-код Dalvik. Dalvik не распознает отдельный файл класса, но упаковывает все файлы классов в формат файла DEX и выполняет байт-код, интерпретируя файл DEX.
Прямым преимуществом этого является то, что исполняемый файл Dalvik меньше по размеру. Если вы понимаете формат файла класса, вы будете знать, что каждый файл класса имеет отдельный пул строковых констант. Если в разных файлах классов есть одинаковые строки, будет дублироваться хранилище. Точно так же, если класс ссылается на методы других классов, соответствующие сигнатуры методов также будут скопированы в файл класса. Будет много ненужной избыточной информации, которая тратит впустую память и влияет на эффективность выполнения.
Итак, как файл DEX решает эту проблему? Если вы не понимаете структуру файла DEX, вы можете прочитать другую мою статью, Android Reverse Notes-DEX File Format Analysis. Файлы DEX обеспечивают единый общий пул констант для использования всех типов файлов, что позволяет избежать избыточной уверенности, уменьшить размер файла и повысить эффективность анализа.
Архитектура виртуальной машины отличается
JVM основана на стековой архитектуре. Когда программа запущена, виртуальная машина Java часто читает и записывает данные в стек. В этом процессе не только многократно выполняются отправка команд и доступ к памяти, но и потребляется много времени ЦП, поэтому для мобильных устройств с ограниченными ресурсами это большие накладные расходы. Каждый раз, когда вызывается метод, выделяется новый кадр стека и помещается в стек. Каждый раз, когда метод возвращается, соответствующий кадр стека выталкивается.
Dalvik основан на архитектуре регистров, и доступ к данным передается напрямую между регистрами.
Машины на основе стека и машины на основе регистров имеют преимущество, которое всегда было предметом споров.
Вообще говоря, машины на основе стека должны использовать инструкции для загрузки данных из стека и управления ими. Следовательно, по сравнению с машинами на основе регистров им требуется больше инструкций для достижения той же производительности. Но инструкции на регистровых машинах должны быть закодированы, поэтому их инструкции часто больше.
Инструкции Dalvik
Формат инструкции
Что касается формата команд Dalvik, на официальном сайте также есть соответствующее введение. Просто введение на официальном сайте слишком невразумительное, я читал его много раз, прежде чем понял. Я все еще анализирую это из реальной команды Dalvik. Ранее проанализированные main() Возьмите это прямо:
Его DexCode выглядит следующим образом:
2 Указывает, из скольких 16-битных слов состоит инструкция
1 Указывает максимальное количество регистров, используемых инструкцией
c Код типа, c представляет индекс постоянного пула
Как показано в следующей таблице, существует много типов кодов типов:
| Мнемонический | Цифры | имея в виду |
|---|---|---|
| b | 8 | Подписанные немедленные данные (байты) |
| c | 16、32 | Постоянный индекс пула |
| f | 16 | Константа интерфейса (действительно только для формата статической ссылки) |
| h | 16 | Подписанные немедленные данные (старшие биты 32-битных или 64-битных значений, младшие биты все 0) |
| i | 32 | Знаковый немедленный (целочисленный) или 32-битный с плавающей запятой |
| l | 64 | Знаковое немедленное (длинное целое) или 64-битное число с плавающей запятой двойной точности |
| m | 16 | Константа метода (действительна только для формата статической ссылки) |
| n | 4 | Подписанные немедленные данные (полубайты) |
| s | 16 | Немедленное подписание (короткое целое число) |
| t | 8、16、32 | Целевой филиал |
| x | 0 | Нет дополнительных данных |
Регистрация имен
Все мы знаем, что виртуальная машина Dalvik основана на архитектуре регистров, и все регистры, которые она использует, 32-битные. Для 64-битных типов используйте два соседних регистра для представления. Dalvik в основном основан на архитектуре ARM.Сам ЦП с архитектурой ARM содержит определенное количество регистров, так сколько регистров поддерживает виртуальная машина Dalvik? Посмотрим один move инструкция:
v Номенклатура
v0 : Регистр локальной переменной, хранит значение a + b
v1 : Текущая ссылка на это
v2 : Регистр параметров, хранящий значение
v3 : Регистр параметров, хранящий значение b
номенклатура
Метод именования p оптимизирован для регистров параметров, а именование регистров параметров взято из p0 Вначале можно легко различить регистр локальной переменной и регистр параметров. Номенклатура используется в синтаксисе smali. Давайте взглянем add() Небольшой код метода:
Это очень ясно. Четыре регистра имеют следующие названия:
v0 : Регистр локальной переменной, хранит значение a + b
p0 : Текущая ссылка на это
p1 : Регистр параметров, хранящий значение
p2 : Регистр параметров, хранящий значение b
номенклатура Подробнее читайте, вообще пользуйтесь номенклатурой.
Дескриптор Dalvik
Прежде чем глубже понять байт-код Dalvik, давайте посмотрим, как Dalvik описывает поля и методы, что также помогает нам читать код smali.
Дескриптор типа
В байт-коде Dalvik всего два типа: базовые и ссылочные. За исключением объектов и массивов, все остальные типы Java являются базовыми типами. Это в основном то же самое, что и дескриптор типа JVM. Основные типы представлены одной буквой. Использование типа массива [ Сказал. Использование ссылочных типов, отличных от массивов L Добавьте полное имя. Как показано в следующей таблице:
| Дескриптор типа | Виды |
|---|---|
| v | void, используется только для типов возвращаемых значений |
| Z | boolean |
| B | byte |
| S | short |
| C | char |
| I | int |
| J | long |
| F | float |
| D | double |
| L | Тип объекта |
| [ | Массив |
Представление поля унифицировано в следующем формате:
Как com.test.Test Один из класса String Тип name Поле в Dalvik можно выразить как:
метод
Описание метода в чем-то похоже на описание поля.Разница в том, что в методе есть описание возвращаемого значения. Базовый формат следующий:
Чтобы com.test.Test В классе add() В качестве примера, метод представляет собой функцию сложения двух чисел, использованную выше, которая описана в Dalvik как:
Набор инструкций Dalvik
Обладая вышеуказанным запасом знаний, вы можете подробно изучить набор инструкций Dalvik. Помимо ранее представленных официальных документов и компиляции набора инструкций Dalvik в AOSP, я лично часто читаю, есть также коды операций Dalvik, составленные иностранными разработчиками, которые являются хорошими учебными материалами. Я также организую полную китайскую версию кода операции Dalvik на основе этой версии. Это может занять некоторое время, и она будет с открытым исходным кодом.
Кратко систематизируем набор инструкций Dalvik.
Пустая инструкция
| грамматика | Описание |
|---|---|
| nop | Пустые инструкции, обычно используемые для выравнивания |
Инструкции по работе с данными
| грамматика | Описание |
|---|---|
| move vA, vB | Назначьте значение регистра vB (4-битный) регистру vA (4-битный) |
| move/from vAA, vBBBB | Назначьте значение регистра vBBBB (16 бит) регистру vAA (8 бит) |
| move-object vA, vB | Назначьте объект, хранящийся в регистре vB (4-битный), в регистр vA (4-битный) |
| move-object/from16 vAA, vBBBB | Назначьте объект, хранящийся в регистре vBBBB (16 бит), в регистр vAA (8 бит) |
| move-result vAA | Переместить однословный результат, не являющийся объектом, последнего типа вызова в указанный регистр vAA |
| move-result-wide vAA | Переместите двойное слово, не являющееся объектом результата последнего invoke-kind, в указанный регистр vAA |
| move-result-object vAA | Переместить результат объекта последнего типа вызова в указанный регистр vAA |
| move-exception | Сохраните исключение, только что обнаруженное в данном регистре |
Инструкция по возврату
| грамматика | Описание |
|---|---|
| return-void | Возврат недействителен |
| return-vAA | Возвращает 32-битный не объектный тип |
| return-wide vAA | Возвращает 64-битный не объектный тип |
| return-object vAA | Возвращает тип объекта |
Инструкции по определению данных
| грамматика | Описание |
|---|---|
| const/4 vA, #+b | Переместите данное буквальное значение (расширенное знаком до 32 бит) в указанный регистр vA |
| const vAA, #+BBBBBBBB | Переместить данное буквальное значение в указанный регистр vAA |
| const/high16 vAA, #+BBBB0000 | Переместить данное буквальное значение (правый ноль расширен до 32 бит) в указанный регистр vAA |
| const-wide/16 vAA, #+BBBB | Переместите данное буквальное значение (расширенное знаком до 64 бит) в указанную пару регистров vAA |
| const-wide vAA, #+BBBBBBBBBBBBBBBB | Переместить данное буквальное значение в указанную регистровую пару vAA |
| const-string vAA, [email protected] | Переместить строковую ссылку, полученную по данному индексу, в указанный регистр vAA |
| const-class vAA, [email protected] | Переместить ссылку на класс, полученную по данному индексу, в указанный регистр vAA |
Инструкция по замку
| грамматика | Описание |
|---|---|
| monitor-enter vAA | Получить блокировку мьютекса указанного объекта |
| monitor-exit vAA | Снять блокировку мьютекса указанного объекта |
Инструкция по оценке типа
| грамматика | Описание |
|---|---|
| check-cast vAA, [email protected] | Если ссылку в данном регистре vAA невозможно преобразовать в указанный тип, создается исключение ClassCastException. |
| instance-of vA, vB, [email protected] | Если указанная ссылка является экземпляром данного типа, присвойте 1 данному целевому регистру, в противном случае присвойте |
| new-instance vAA, [email protected] | Создайте новый экземпляр в соответствии с указанным типом и сохраните ссылку на новый экземпляр в целевом регистре vAA. |
Инструкции по работе с массивом
| грамматика | Описание |
|---|---|
| array-length vA, vB | Получить длину массива в регистре vB и сохранить в регистре vA |
| new-array vA, vB, [email protected] | Создайте массив типа инструкции (тип @CCC) и указанного размера (vB) и назначьте его регистру vA. |
| filled-new-array | Создайте тип инструкции (тип @ BBBB) и массив заданного размера и заполните содержимое |
Инструкция по исключению
| грамматика | Описание |
|---|---|
| throw vAA | Выбросить исключение, указанное в регистре vAA |
Инструкция по прыжкам
| грамматика | Описание |
|---|---|
| goto +AA | Безоговорочный переход к указанному смещению, смещение AA |
| if-test vA, vB, +CCCC | Если результат сравнения двух заданных регистров соответствует ожиданиям, перейдите к смещению CCCC |
Инструкции по эксплуатации в полевых условиях
Инструкции по полевым операциям делятся на две категории: операции с обычными полями и статические поля.
Общее поле
| грамматика | Описание |
|---|---|
| iinstanceop vA, vB, [email protected] | Выполнять операции с идентифицированными полями полей экземпляра объекта и загружать или сохранять результаты в регистрах значений. |
Для разных типов общих полей есть следующие команды:
Статическое поле
| грамматика | Описание |
|---|---|
| sstaticop vAA, [email protected] | Выполнить операцию статического поля определенного объекта над идентифицированным статическим полем и загрузить или сохранить результат в регистр значений |
Для разных типов статических полей есть следующие команды:
Инструкция по вызову метода
| грамматика | Описание |
|---|---|
| invoke-virtual | Вызов обычного виртуального метода (метод не является частным, статическим или окончательным, а также не является конструктором) |
| invoke-super | Вызов родительского метода |
| invoke-direct | Вызвать нестатические прямые методы (то есть методы экземпляра, которые не могут быть переопределены по своей природе, то есть методы или конструкторы частного экземпляра) |
| invoke-static | Вызов статического метода |
| invoke-interface | Вызвать метод интерфейса экземпляра |
Инструкции по работе с данными и преобразованию
Инструкции по работе с данными и инструкции по преобразованию данных относительно просты, и их много, поэтому я не трачу здесь место на их написание. Заинтересованные студенты могут проверить информацию. Я также открою исходный код полной версии таблицы набора инструкций Dalvik.
подводить итоги
В этой статье представлены соответствующие знания о виртуальной машине Dalvik, сравнивается виртуальная машина Dalvik и JVM, а затем основное внимание уделяется набору инструкций Dalvik. Очень полезно понимать команду Dalvik для реверс-инжиниринга.В конце концов, если вы хотите изменить логику программы, большую часть времени вы имеете дело с кодом smali. Код smali основан на наборе инструкций Dalvik. Если вы читали код smali, вы должны быть знакомы с упомянутыми выше командами Dalvik.
Наконец, давайте взглянем на другие статьи из серии «Обратные заметки об Android». Лучше читать их по порядку!
Подробный формат файла класса
Smali —— Математическая операция, условное суждение, цикл
Класс синтаксического анализа Smali
Для получения дополнительных знаний, связанных с обратным проектированием, отсканируйте код и следуйте за мной!
Интеллектуальная рекомендация
совместный запрос mysql с тремя таблицами (таблица сотрудников, таблица отделов, таблица зарплат)
1. Краткое изложение проблемы: (внизу есть инструкция по созданию таблицы, копирование можно непосредственно практиковать с помощью (mysql)) Найдите отделы, в которых есть хотя бы один сотрудник. Отоб.
[Загрузчик классов обучения JVM] Третий день пользовательского контента, связанного с загрузчиком классов
IP, сеанс и cookie
IP, сеанс и cookie IP IP заблокирован Почему заблокирован IP Как решить проблему блокировки IP Как получить IP-адрес прокси Используй прокси Подтвердите действительность IP-адреса прокси О прокси http.



















