Size: a a a

Compiler Development

2019 September 19

М

Махи in Compiler Development
а с теоретической точки зрения? Например есть тема, что в байткоде можно сделать так, что control flow граф был не reducible. правда ли, что на самой джаве так нельзя?
источник

М

Махи in Compiler Development
Konstantin
Тогда нет, не правда. Всегда можно написать на джаве интерпретатор байт-кода, а сам байт-код загрузить строкой прямо в исходник. Будет корректный код на джаве
хитро хитро
источник

М

Махи in Compiler Development
Konstantin
Тогда нет, не правда. Всегда можно написать на джаве интерпретатор байт-кода, а сам байт-код загрузить строкой прямо в исходник. Будет корректный код на джаве
но это не ответ на несколько другой вопрос
источник

K

Konstantin in Compiler Development
В джаве же есть goto?
источник

М

Махи in Compiler Development
не совсем. там есть break из неймспейса. просто goto нет
источник

K

Konstantin in Compiler Development
а вызов функции по указателю?
источник

А

Алексей in Compiler Development
Konstantin
В джаве же есть goto?
в джаве есть while, есть switch case
источник

М

Махи in Compiler Development
и что? у goto функциональность сильно шире.
источник

K

Konstantin in Compiler Development
я легко могу себе представить, как императивный код, для которого можно написать алгоритм без goto, грубо говоря, оптимизируется в какую-нибудь лютую стейт-машину, которую без goto уже не выразить. И сделать обратное преобразование наверняка сложнее
источник

А

Алексей in Compiler Development
Махи
и что? у goto функциональность сильно шире.
можно вполне сделать goto из подручных средств, перечисленных выше
источник

М

Махи in Compiler Development
Алексей
можно вполне сделать goto из подручных средств, перечисленных выше
джава тьюринг полная, так что без goto всегда написать можно. вопрос как раз в том, можно ли из обфусцированной версии восстановить изначальный код
источник

М

Махи in Compiler Development
на практике таких инструментов нет, насколько я понимаю. но вопрос о том, можно ли это в теории сделать.
источник

K

Konstantin in Compiler Development
в теории конечно можно
источник

М

Махи in Compiler Development
почему?
источник

АУ

Анна Удовиченко in Compiler Development
Задача восстановления изначального кода в общем случае не решается
источник

K

Kitsu in Compiler Development
Махи
Привет. Вопрос возник г̶л̶у̶п̶ы̶й̶. Правда ли, что не любой java байтод можно декомпилировать в корректный код (даже если забыть про дженерики).
На практике у меня часто выходило так, что обработка эксепшенов нормально не декомпилилась. Все остальное хорошо читаемо
источник

М

Махи in Compiler Development
Анна Удовиченко
Задача восстановления изначального кода в общем случае не решается
почему?) в смысле не разрешима?
источник

K

Konstantin in Compiler Development
Махи
почему?) в смысле не разрешима?
Надо просто получить код на джаве (ок, без хаков типа интерпретатора), осмысленный код на джаве, или восстановить исходный?
источник

М

Махи in Compiler Development
просто код на джаве. понятно, что исходный нельзя. можно написать две разных проги на джаве, которые в одинаковый байткод транслируются
источник

AT

Alexander Tchitchigin in Compiler Development
Махи
на практике таких инструментов нет, насколько я понимаю. но вопрос о том, можно ли это в теории сделать.
Подождите, это два отдельных вопроса.
1. Восстановить Java-исходник из скомпилированного из этого исходника class-файла. Делается на раз.
2. "Восстановить" Java-код из произвольного (валидного) JVM-байткода (например, полученного от scalac). В общем случае - невозможно.
источник