DioD
offline
Опыт:
45,184Активность: |
Решил на днях познать дзен, прошел где-то месяц - не получается.
Суть такая, относительно недавно мне надоело писать всякую хрень на яве и я решил лезть в самые самые "глубины", а именно при помощи ряда колдунств, волшебного класса Unsafe (который запитан не менее волшебными нативками) я задумал писать и читать память JVM "на прямую".
На базе ряда примеров которые валялись в интернетах я смог "кастить" классы в друг друга игнорируя требования верификатора (да еще так чтобы это работало) подменять методы, подменять объекты, редактировать их произвольным образом, в общем всё то что было в примерах я освоил и адаптировал под 64бита и текущую версию ява машины.
Всё это хаки и костыли, однако это существенно интереснее чем книжки "ява для чайников" от того и потому что узнаешь чтото принципиально новое (хотя никому и не нужное).
Однако в отличии от изначальных разработчиков я действовал достаточно грубыми методами, вроде брутфорса, что явно и очевидно "не торт". (хотя не факт, в статьях люди не пишут как они узнали за что отвечает объект А и какова его структура).
Позже я начал всё сильнее и сильнее зарываться в сорцы виртуальной машины, той самой openJDK от ребят из оракла.
А упёрся я в чтение и запись "локальных" переменных игнорируя безопасность изоляцию и вообще всё что только можно, на прямую.
Из статей, описания, здравого смысла и ряда других вещей я знаю, что на каждый метод, при его вызове, создаётся стекфрейм, стекфреймы хранятся на натив потоке до определённого числа (а дальше stackoverflow). В этих самых стекфреймах и записаны локальные переменные, да еще и так, что их можно спокойно читать ровно как поля класса. А ВОТ В СОРЦЕ JVM НАЙТИ ЭТОГО НЕ МОГУ.
кто шарит пните в нужную сторону а? |
13.02.2014, 18:06 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|