![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| lazycat |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 15.7.2007 Репутация: 1 Всего: 1 |
Доброго времени суток всем!
Есть приложение. Исходный код недоступен. В какой-то момент времени в нем создается экземпляр класса A. Надо вместо A подсунуть ему класс B. В классе A и B одинаковый набор переменных и методов, но коды методов различаются. Простейшее решение, заменить A.class другим файлом не проходит, так как A - из библиотеки rt.jar (увы!). Сделать загрузчик классов, который бы формировал не тот код не получается - метод defineClass - final. Обращаюсь к гуру, как вы думаете, есть ли способ решить проблему, не уродуя JVM? Кстати, по поводу последнего вопроса. Кто знает, где лежит исходный код JRE? Все ссылки на сервер Sun уже нерабочие (похоже Oracle ведет свою политику). Заранее благодарен всем откликнувшимся. |
|||
|
||||
| dobrolub |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
посмотри на следующие вещи:
javas -Xbootclasspath/p: myjar.jar ставит твой jarик вперёд всех, но там могут быть ограничения на package name. Если такие есть, посмотри как их можно обойти. Глянь в исходники java. посмотри на java.lang.instrument package . Он предназначен для переопределения классов. Но я не уверен, что можно переопределить класс из java.* А что за задачка то? Может можно по другому подойти? Это сообщение отредактировал(а) dobrolub - 28.10.2010, 05:04 |
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Видимо, "вскрыть сейф". |
|||
|
||||
| Skipy |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 487 Регистрация: 24.8.2006 Где: Москва, Россия Репутация: 6 Всего: 16 |
Неделю назад скачивал исходники 6u23. Сейчас проверил: прямо на странице скачивания - http://www.oracle.com/technetwork/java/jav...oads/index.html - есть раздел Java SE 6 JDK Source Code. Нажимаете кнопку, попадаете сюда: http://download.java.net/jdk6/source/. Пожалуйста, полные исходники по лицензии JRL. 7-я версия тут же: http://download.java.net/jdk7/ |
|||
|
||||
| Kircul |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 166 Регистрация: 20.2.2007 Репутация: 6 Всего: 7 |
Насколько я понял это все продолжение данной темы.
Прикладываю пример решения задачи с помощью замены загрузчика классов (прошу строго не судить за код, это только набросок). В моем случае байт-код класса изменяется перед загрузкой "на лету", пытаясь продебажить код не понятно в чем проблемма ;). В общем так или иначе желательно запускать с параметром -verbose и разобраться какие классы каким загрузчиком загрузились. Это поможет определиться подойдет ли данный метод в вашем случае. Присоединённый файл ( Кол-во скачиваний: 4 )
pr.tar.gz 5,45 Kb |
|||
|
||||
| lazycat |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 227 Регистрация: 15.7.2007 Репутация: 1 Всего: 1 |
Спасибо всем, кто откликнулся, но неожиданно проблема разрешилась сама собой (владелец программы дал исходные коды и извращаться уже не надо).
Поскольку техническая проблема не решена, то вопрос как решенный не помечаю. Не знаю, стоит ли продолжать дискуссию, вопрос, хотя по-моему, и интересный, но уж слишком экзотический, вряд ли подобная проблема возникнет повторно. Еще раз спасибо всем! |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |