![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
quadroman |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 3.8.2006 Репутация: нет Всего: нет |
Люди добрые (и не только) помогите бедному юзеру. Приспичило мне кое-че поменять в файле блаблабла.class. С Java раньше не сталкивался, поэтому скачал первое что нашел - DJdecompiler. Открыл я этот файл, пару строк заменил, сохранил под именем блаблабла.java. Он зараза не компилится,при этом DJdecompiler выдает следующее:
C:\my\LOGINC~1\LoginController.java:261: ';' expected GameServerThread gs; ^ C:\my\LOGINC~1\LoginController.java:267: illegal start of expression goto _L1 ^ C:\my\LOGINC~1\LoginController.java:269: ';' expected JVM INSTR monitorexit ; ^ C:\my\LOGINC~1\LoginController.java:270: illegal start of expression goto _L2 ^ C:\my\LOGINC~1\LoginController.java:272: not a statement exception; ^ C:\my\LOGINC~1\LoginController.java:282: ';' expected JVM INSTR monitorenter ; ^ C:\my\LOGINC~1\LoginController.java:285: not a statement GameServerThread gs; ^ C:\my\LOGINC~1\LoginController.java:285: ';' expected GameServerThread gs; ^ C:\my\LOGINC~1\LoginController.java:291: illegal start of expression goto _L1 ^ C:\my\LOGINC~1\LoginController.java:293: ';' expected JVM INSTR monitorexit ; ^ C:\my\LOGINC~1\LoginController.java:294: illegal start of expression goto _L2 ^ C:\my\LOGINC~1\LoginController.java:296: not a statement exception; ^ C:\my\LOGINC~1\LoginController.java:344: not a statement e; ^ ... ... ... 39 errors А еще когда я .class открываю DJdecompiler'ом там несколько раз встречается: break MISSING_BLOCK_LABEL_61; и break MISSING_BLOCK_LABEL_169; (549,506,493,167, и т.д.) Что это все может означать кроме того что я нуб и чайник в Java? DJdecompiler не может блаблабла.class правильно и полностью раскомпилить, или код кривой(в чем я сильно сомневаюсь, так как взят он из рабочей проги)? Насчет классов... так я все JARы что были в папке с прогой прописал. Мне всего то надо было поменять строку public SessionKey(int playOK1, int loginOK2, int loginOK1, int playOK2) на public SessionKey(int loginOK1, int loginOK2, int playOK1, int playOK2) (( P.S. SDK и JRE 1.5.0, DJ Java Decompiler версии 3.7 Присоединённый файл ( Кол-во скачиваний: 5 ) ![]() |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Не смог декомпилировать, причины могут быть различными. Эти строки полностью идентичны, важны только типы параметров и их порядок, а не то как они называются. И еще вопрос, зачем тебе понадобилось декомпилировать классы, и почему у тебя нет исходников? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
quadroman |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 3.8.2006 Репутация: нет Всего: нет |
Это один из файлов сервера MMORPG игры LineageII, написанного на Java. Распространяется бесплатно, на условиях помощи и поддержки проекта.
Если это одно и то же, то почему очень многим это помогло? Скорее всего ты просто не видел сам файл LoginController.class. Дело именно в порядке, надо поменять public SessionKey(int playOK1, int loginOK2, int loginOK1, int playOK2) на public SessionKey(int loginOK1, int loginOK2, int playOK1, int playOK2) Это позволит мне подконнектиться своим старым клиентом к новому серверу. Конечно можно обновить клиент игры, но качать пару сотен мегов через GPRS как то не вдохновляет, тем более что достаточно только поменять одну строку в одном файле и все будет норм. Если бы кто-нибудь сделал это в присоединенном файле, я был бы очень благодарен. Но все же меня интересует, что за ошибка например JVM INSTR monitorenter; ? ^ хотя JVM установлена (как я понимаю она входит в состав jre). И еще почему компилятор ругается на goto. Ведь исходники все-таки как-то компилировали. Я знаю что goto не приветствуется, но все же есть ли способ обойти это ограничение? Это сообщение отредактировал(а) quadroman - 3.8.2006, 16:21 |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Это идентичные строки.
Декомпилятор не всегда дает код Java который можно в последствии скомпилировать. В этом не ничего удивительного. goto хоть и зарезервированное слово, но его использование запрещено. Вероятно поэтому и зарезервированно. |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Это не код Java. Когда декомпилятор не смог декомпилировать код, он просто оставил все как есть, а именно он оставил байткод, в виде некой разновидности Java-ассемблера. monitorenter, goto - это не операторы Java, это инструкции виртуальной Java машины. Тут или надо сидеть и вручную на основе байткода восстанавливать исходник. Или переписать байткод, единственного метода. И то, и другое, задачи нетривиальные. А почему ты вообще, решил что проблема в этом месте, учитывая что в Java ты не разбираешься и вообще даже кода не видел? -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
quadroman |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 3.8.2006 Репутация: нет Всего: нет |
Сервер при попытке подключения моего клиента(с более старым протоколом, чем в сервере) пишет SessionKey is incorrect, closing connection.
На форуме сервера многие сталкивались с такой же проблемой, и ее решение - заставить сервер использовать более старый SessionKey, поменяв соответствующую строку. Я не разбираюсь в Java, но это не значит что я не разбираюсь в C/C++ или в Delphi)). Как это я не видел кода? Декомпилятор показал именно код, а не байткод. Сначала я попробовал jad, он не смог полностью декомпилировать этот файл, выдав сообщение об ошибке. Зато DJdecompiler без проблем открыл .class, при этом никаких ошибок не было. Мне это показалось странным, так как он основан на том же движке jad. Но раз не было сообщений об ошибках, я сделал вывод что декомпиляция прошла успешно. |
|||
|
||||
allex |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 59 Регистрация: 5.9.2005 Репутация: нет Всего: нет |
quadroman, исходники этого файла вообще-то свободно доступны судя по имени пакета.
http://l2j.cvs.sourceforge.net/l2j/L2_Game...r.java?view=log Но я хоть убей там не вижу такого - какая версия-то хоть? Ну или дата сборки примерная? Другой выход - попытаться использовать дизассемблер, а не декомпилятор. Дизассемблер нужен такой, который выдает код в формате jasmin - Java ассемблер. У меня валяется jasper, но он не справился - судя по всему, не понимает новых фич языка. Другой дизассемблер искать лень. Проще найти исходник. LSD,
Неправда ваша, батенька. Это сигнатура неабстрактного метода, параметры внутри метода используются. Добавлено @ 17:22 quadroman, во, я понял, как должно получиться: Открывай jad-ом только файл LoginController$SessionKey. Убирай модификатор static у class. И правь сигнатуру. После чего компилируй. Если бы я не тупил и понял, как приложить файл - я бы это сделал ![]() Это сообщение отредактировал(а) allex - 3.8.2006, 17:25 Присоединённый файл ( Кол-во скачиваний: 3 ) ![]() |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
А можно здесь поподробнее? Просто я не очень понял, как имя переменной влияет на сигнатуру неабстрактного метода да и любого друго тоже.... Это сообщение отредактировал(а) MoonCat - 3.8.2006, 18:30 |
|||
|
||||
quadroman |
|
|||
Новичок Профиль Группа: Участник Сообщений: 4 Регистрация: 3.8.2006 Репутация: нет Всего: нет |
Дата сборки:
==================== L2J Server ==================== $Date: 2006/12/06 19:14:22 $ качал 2 недели назад, но они похоже нечасто готовую сборку апдейтят. Эта ссылка на старые версии сервера, кстати к новым исходникам доступ есть только у разработчиков((
Так должно получиться? Все бы было хорошо если бы мой компилятор все это откомпилил(( Это сообщение отредактировал(а) MoonCat - 3.8.2006, 18:49 |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Модератор: quadroman, используйте кнопку КОД для оформления Java кода.
Скорее всего нет. Мне кажется, что когда декомпилятор выводил имя класса ввиде: LoginController$SessionKey, то имелось ввиду, что класс LoginController имеет внутренний класс SessionKey. Что-то типа того:
Это сообщение отредактировал(а) MoonCat - 3.8.2006, 18:48 |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Ключевое слово используются. Сами сигнатуры методов полностью идентичны (сигнатура определяется только типами параметров и их порядком следования), но не именем формального параметра. Информация об именах формальных параметров сохраняется в class-файле (по крайней мере когда он скомпилирован с отладочной информацией), но смысла их менять нет. Ему нужно изменить не саму сигнатуру, а метод, хотя для этого и достаточно немного подправить объявление метода. А вообще на SourceForge.net есть анонимный доступ к CVS (только для чтения, правда, но этого достаточно). Можно утянуть исходник этого класса нужной версии. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |