Информация
- В рейтинге
- Не участвует
- Откуда
- Россия
- Зарегистрирован
- Активность
Специализация
Десктоп разработчик, Разработчик мобильных приложений
Java
C++
Linux
Git
Разработка под Android
Системное программирование
Linux kernel
Программирование микроконтроллеров
Прикладная математика
ООП
Ну, значит эта jvm не проводит полную верификацию.
Я лично чаще взаимодействую с андроидом, поэтому точно знаю, что верификатор байткода dalvik явно требует, чтобы до вызова инициализатора не было вообще никакого доступа к регистру this.
Этот регистр до вызова <init> имеет специальный атрибут для проверки. Как и вообще любой другой регистр новосозданного объекта - после аллокации нового объекта, но до вызова его конструктора, доступ к нему запрещён
Ну, вальгалла (точнее дополнительные jep к ней) хотят решить и эту проблему тоже
К сожалению это не так. Доступ к this до вызова super запрещён и это явно проверяется
Похожая на вашу история - только у меня это были Minecraft и java
Помимо реализации oracle, имеющией перечисленные вами проблемы, есть полностью открытые реализации openjdk и openj9
Не поместилось в пост — поддерживаются все архитектуры (arm, aarch64, x86 и x86_64, a riscv64 в планах, ведь ещё нет реальных устройств) и все версии андроида начиная с 8.0 и до последней превью 15. Проект залит на jitpack.io, так что можно его попробовать просто прописав в зависимостях
Очень интересует работоспособность на девайсах с кастомными оболочками вроде miui, мало ли что в них может быть изменено.... Я тестировал на всём спектре эмуляторов андроид студии и своих двух смартфонах под управлением android 9 и 12
Согласен, коряво написал. Я имел ввиду, что рефлексией не всегда можно получить поля у системных классов. На своём то тестовом в любом случае получится
Очень прошу делиться своим мнением о статье, найденный косяках, кривых формулировках или несоответствии теории и практики. Я только начинающих хабровчанин, и это моя вторая статья, так что ваши замечания помогут в улучшении качества контента
Вы не совсем правы, что его нет, потому что с вроде с 16 версии jdk есть занимательный инкубатор, который содержит полноценное околобезопсное API для доступа к нативной памяти и функциям. И небольшой спойлер - я занимаюсь его портированием на андроид (хотя скорее будет просто аналог, а не прямой порт)
Я крайне не рекомендую использовать arrayCast где бы то ни было, ведь почти любое взаимодействие приведённого объекта с методами вызывает жёсткое падение виртуальной машины. Единственный найденный мной способ хотя бы вернуть их - положить в массив (что и сделано в статье). Реальное практическое применение, это кратковременный (когда иначе просто неполучится) доступ к полям ОЧЕНЬ хорошо исследованных объектов. В следующей статье надеюсь написать о технике, что даст полный доступ ко всем полям и методам (и даже статичечкому конструктору) в нормальном виде, а не через эти костыли.