powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Поясните по goto в Java и про другие не ясные инструкции
11 сообщений из 11, страница 1 из 1
Поясните по goto в Java и про другие не ясные инструкции
    #37753669
novexelf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В исходнике java, полученном после декомпиляции появились инструкуции
goto
S;
0;
JVM INSTR dup2 ;
и т.д.

Это результат не правильной декомпиляции или подобные инструкции для java существуют?


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
    public static boolean getStr(String S[])
    {
        boolean Result;
        int Len[];
        byte B[];
        Result = true;
        if(isNow)
        {
            Result = getWStr(S);
            return Result;
        }
        Len = new int[1];
        B = new byte[1];
        Result = getLen(Len);
        if(!Result) goto _L2; else goto _L1
_L1:
        int iChar;
        S[0] = "";
        iChar = 0;
_L4:
        if(iChar >= Len[0]) goto _L2; else goto _L3
_L3:
        Result = getByte(B);
        if(!Result)
        {
            S[0] = "";
            break; /* Loop/switch isn't completed */
        }
        if(!isAlone)
            break MISSING_BLOCK_LABEL_102;
        S;
        0;
        JVM INSTR dup2 ;
        JVM INSTR aaload ;
        String.valueOf();
        String.valueOf();
        String.valueOf(String.valueOf(new String(B)));
        concat();
        JVM INSTR aastore ;
        continue; /* Loop/switch isn't completed */
        S;
        0;
        JVM INSTR dup2 ;
        JVM INSTR aaload ;
        String.valueOf();
        String.valueOf();
        String.valueOf(String.valueOf(new String(B, "windows-1251")));
        concat();
        JVM INSTR aastore ;
        continue; /* Loop/switch isn't completed */
        Exception e;
        e;
        S;
        0;
        JVM INSTR dup2 ;
        JVM INSTR aaload ;
        String.valueOf();
        String.valueOf();
        String.valueOf(String.valueOf((char)B[0]));
        concat();
        JVM INSTR aastore ;
        iChar++;
          goto _L4
_L2:
        return Result;
    }


...
Рейтинг: 0 / 0
Поясните по goto в Java и про другие не ясные инструкции
    #37753826
rrrrrrrr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инструкции есть, это в синтаксисе языка такого функционала нету.

http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.goto
...
Рейтинг: 0 / 0
Поясните по goto в Java и про другие не ясные инструкции
    #37753854
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
novexelf,
это декомпиляция. Она ущербна и не понимает ЯП высокого уровня.
goto этот машинное. В него переходит любой твой супер-пупер паттрен ООП.
...
Рейтинг: 0 / 0
Поясните по goto в Java и про другие не ясные инструкции
    #37753896
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
novexelf,

это декомпилятор попался какй-то убогий. Нормальный декомпилятор догадался бы, как представить программу с goto в виде условных и циклов. Сам байткод условных предложений и циклов не содержит, только условные и безусловные переходы.
...
Рейтинг: 0 / 0
Поясните по goto в Java и про другие не ясные инструкции
    #37753936
novexelf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я использовал DJ Java Decompiler

Первый раз он нормально декомпилировал, а в следующий раз, когда я декомпилировал очередную версию приложения несколько функций декомпилировалось вот так, я сравнил с предыдущей версий там цикл и несколько условий.

Теперь вопрос, как перевести эти команды и переписать функцию чтобы она нормально компилировалась? есть куда посмотреть?
...
Рейтинг: 0 / 0
Поясните по goto в Java и про другие не ясные инструкции
    #37753941
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не существует декомпиляторов, гарантирующих восстановление Java кода без ошибок. Это как повезёт.
Но переписывание декомпилированного класса не имеет смысла. Видел, как жабабыдлокодеры пытались "улучшить" или "исправить" программу, но портили её этим приёмом. Смысл в декомпиляции - посмотреть, как работает Java класс, если к нему нет достаточной документации. В этом случае мелкие погрешности в восстановлении кода не мешают.
Можно испытать другой декомпилятор, вдруг лучше справится. Я обычно использую jd-gui.
...
Рейтинг: 0 / 0
Поясните по goto в Java и про другие не ясные инструкции
    #37753948
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
novexelf,

Условные:
Код: java
1.
2.
3.
4.
5.
6.
        if(!Result) goto _L2; else goto _L1
_L1:
 ...
_L2:
        return Result;
    }


преобразуем в
Код: java
1.
2.
3.
4.
5.
        if (Result) { // убрали отрицание "!"
 ...
        }
        return Result;
    }



Там, где goto назад - это цикл. Ставим универсальный цикл for(;;):
Код: java
1.
2.
3.
4.
5.
6.
7.
_L4:
   ...
        if(iChar >= Len[0]) goto _L2; else goto _L3
_L3:
 ...
          goto _L4
_L2:



преобразуется в
Код: java
1.
2.
3.
4.
5.
    for (;;) {
         ...
        if(iChar >= Len[0]) break;
         ...
    }


На самом деле там похоже был цикл по массиву, но это уже красОты. Будет работать и так.

Гораздо хуже, что есть вовсе неразобранные места:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
        if(!isAlone)
            break MISSING_BLOCK_LABEL_102;
        S;
        0;
        JVM INSTR dup2 ;
        JVM INSTR aaload ;
        String.valueOf();
        String.valueOf();
        String.valueOf(String.valueOf(new String(B)));
        concat();
        JVM INSTR aastore ;


Это надо смотреть байткод.
...
Рейтинг: 0 / 0
Поясните по goto в Java и про другие не ясные инструкции
    #37753953
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan MНе существует декомпиляторов, гарантирующих восстановление Java кода без ошибок.
Уточню: не существует в свободном обороте. Теоретически ничто не мешает такой декомпилятор сделать, только это будет дорого стоить.
...
Рейтинг: 0 / 0
Поясните по goto в Java и про другие не ясные инструкции
    #37753958
novexelf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
C условиями и циклами все понятно, тут проблем нет, а вот как раз вопрос по неразобранным местам, как с ними быть?

Мне как раз нужно не посмотреть как работает класс, а добавить свою функцию, всего одну, а после выполнить и получить результат.
...
Рейтинг: 0 / 0
Поясните по goto в Java и про другие не ясные инструкции
    #37753969
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
novexelfМне как раз нужно не посмотреть как работает класс, а добавить свою функцию, всего одну, а после выполнить и получить результат.
Возьмите декомпилированный класс, все гнилые методы выкинте, добавьте свою функцию, скомпилируйте.
Затем слейте старый и новый классфайлы с помощью какой-либо библиотеки для манипуляций с класс-файлами - javaAssist, ASM, ну их много разных.
...
Рейтинг: 0 / 0
Поясните по goto в Java и про другие не ясные инструкции
    #37753997
rfq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rfq,

вообще-то просто взять метод из одного класса и вставить в другой нельзя - надо убедится, что ссылки в пул констант указывают на те же константы, а если нет - поправить.

Проще всего сливать классы так: найти дизассемблер, который генерит компилируемый код. Дизассемблировать оба класса, текстуально перенести новую функцию в старый класс, скомпилировать ассемблером.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Поясните по goto в Java и про другие не ясные инструкции
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]