Некоторые проблемы с синтаксисом после декомпиляции - PullRequest
0 голосов
/ 06 октября 2011

Мне недавно пришлось декомпилировать файлы проектов .class. Декомпилятор работал довольно хорошо, за исключением того, что теперь в коде у меня есть такие странные маленькие фрагменты:

break MISSING_BLOCK_LABEL_666;
Exception exception;
exception; 

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

Если у кого-то возникла такая проблема после декомпиляции или просто идея, почему это произойдет, я был бы очень признателен за помощь!

Пожалуйста, не стесняйтесь спрашивать, если вам нужна дополнительная информация ...

Ответы [ 2 ]

1 голос
/ 06 октября 2011

Я не знаю этого конкретного случая, но компилятор Java делает много улучшений и оптимизаций.Поэтому, если вы декомпилируете классы, вы увидите эту оптимизацию вместо исходного кода.Компилятор разрешает «Синтаксический сахар» (специальные формы кода, которые облегчают вашу жизнь), и я думаю, что ваша проблема в этом.Например: каждый открытый статический финал, который вы используете в своем коде, будет преобразован в его значение в декомпилированном коде (например, Integer.MAX_INT), или циклы for с итератором (for foo f: foos) будут разрешены во что-то еще.Достаточно взглянуть на декомпилированный Enumerator.

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

0 голосов
/ 06 октября 2011

Ваши классы были скомпилированы с использованием JDK 7? В Java 7 улучшены / расширены предложения try и catch. Компилятор может генерировать код немного иначе, чем раньше, даже если новый синтаксис не используется. Этого может быть достаточно, чтобы сбить с толку декомпилятор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...