Обновить
10
0
Владимир Козелков@v7878

Пользователь

Отправить сообщение

Ну, значит эта jvm не проводит полную верификацию.

Я лично чаще взаимодействую с андроидом, поэтому точно знаю, что верификатор байткода dalvik явно требует, чтобы до вызова инициализатора не было вообще никакого доступа к регистру this.

Этот регистр до вызова <init> имеет специальный атрибут для проверки. Как и вообще любой другой регистр новосозданного объекта - после аллокации нового объекта, но до вызова его конструктора, доступ к нему запрещён

Ну, вальгалла (точнее дополнительные jep к ней) хотят решить и эту проблему тоже

К сожалению это не так. Доступ к this до вызова super запрещён и это явно проверяется

Похожая на вашу история - только у меня это были Minecraft и java

Помимо реализации oracle, имеющией перечисленные вами проблемы, есть полностью открытые реализации openjdk и openj9

Не поместилось в пост — поддерживаются все архитектуры (arm, aarch64, x86 и x86_64, a riscv64 в планах, ведь ещё нет реальных устройств) и все версии андроида начиная с 8.0 и до последней превью 15. Проект залит на jitpack.io, так что можно его попробовать просто прописав в зависимостях

dependencies {
    implementation 'com.github.vova7878.PanamaPort:AndroidPanama:v0.0.1-preview'
}

Очень интересует работоспособность на девайсах с кастомными оболочками вроде miui, мало ли что в них может быть изменено.... Я тестировал на всём спектре эмуляторов андроид студии и своих двух смартфонах под управлением android 9 и 12

Согласен, коряво написал. Я имел ввиду, что рефлексией не всегда можно получить поля у системных классов. На своём то тестовом в любом случае получится

Очень прошу делиться своим мнением о статье, найденный косяках, кривых формулировках или несоответствии теории и практики. Я только начинающих хабровчанин, и это моя вторая статья, так что ваши замечания помогут в улучшении качества контента

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

Я крайне не рекомендую использовать arrayCast где бы то ни было, ведь почти любое взаимодействие приведённого объекта с методами вызывает жёсткое падение виртуальной машины. Единственный найденный мной способ хотя бы вернуть их - положить в массив (что и сделано в статье). Реальное практическое применение, это кратковременный (когда иначе просто неполучится) доступ к полям ОЧЕНЬ хорошо исследованных объектов. В следующей статье надеюсь написать о технике, что даст полный доступ ко всем полям и методам (и даже статичечкому конструктору) в нормальном виде, а не через эти костыли.

Информация

В рейтинге
Не участвует
Откуда
Россия
Зарегистрирован
Активность

Специализация

Десктоп разработчик, Разработчик мобильных приложений
Java
C++
Linux
Git
Разработка под Android
Системное программирование
Linux kernel
Программирование микроконтроллеров
Прикладная математика
ООП