Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Поясните по goto в Java и про другие не ясные инструкции / 11 сообщений из 11, страница 1 из 1
14.04.2012, 00:48:42
    #37753669
novexelf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поясните по goto в Java и про другие не ясные инструкции
В исходнике 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
14.04.2012, 11:11:53
    #37753826
rrrrrrrr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поясните по goto в Java и про другие не ясные инструкции
Инструкции есть, это в синтаксисе языка такого функционала нету.

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

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

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

Теперь вопрос, как перевести эти команды и переписать функцию чтобы она нормально компилировалась? есть куда посмотреть?
...
Рейтинг: 0 / 0
14.04.2012, 15:04:12
    #37753941
Partisan M
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поясните по goto в Java и про другие не ясные инструкции
Не существует декомпиляторов, гарантирующих восстановление Java кода без ошибок. Это как повезёт.
Но переписывание декомпилированного класса не имеет смысла. Видел, как жабабыдлокодеры пытались "улучшить" или "исправить" программу, но портили её этим приёмом. Смысл в декомпиляции - посмотреть, как работает Java класс, если к нему нет достаточной документации. В этом случае мелкие погрешности в восстановлении кода не мешают.
Можно испытать другой декомпилятор, вдруг лучше справится. Я обычно использую jd-gui.
...
Рейтинг: 0 / 0
14.04.2012, 15:18:38
    #37753948
rfq
rfq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поясните по goto в Java и про другие не ясные инструкции
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
14.04.2012, 15:21:08
    #37753953
rfq
rfq
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поясните по goto в Java и про другие не ясные инструкции
Partisan MНе существует декомпиляторов, гарантирующих восстановление Java кода без ошибок.
Уточню: не существует в свободном обороте. Теоретически ничто не мешает такой декомпилятор сделать, только это будет дорого стоить.
...
Рейтинг: 0 / 0
14.04.2012, 15:30:41
    #37753958
novexelf
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Поясните по goto в Java и про другие не ясные инструкции
C условиями и циклами все понятно, тут проблем нет, а вот как раз вопрос по неразобранным местам, как с ними быть?

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

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

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


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