#java #class #scala #bytecode #verification
#java #класс #scala #байт-код #проверка
Вопрос:
Я «обновил» некоторые файлы jar с версии файла класса 49.0 до 50.0 с помощью ProGuard.
Поскольку предварительная проверка необязательна для версии 50.0, мне интересно, есть ли способ проверить, действительно ли в файле класса есть атрибут StackMapTable.
(Это не значит, что я не доверяю ProGuard «[…] Следующие параметры обновляют файлы классов до Java 6, обновляя их внутренние номера версий и предварительно проверяя их.» но я хотел бы узнать, как проверить существование StackMapTable.)
Комментарии:
1. итак, у вас нет исходных текстов, и вы не смогли скомпилировать его с помощью компилятора Java 6???
2. Я использую его с Scala и
scalac
на данный момент генерирует код только для Java 5 (49.0).3. но у вас не должно возникнуть проблем с компиляцией кода java 5 для запуска в jvm 6
4. Дело не в этом. Я хочу выяснить, работают ли подписи и байт-код, выданные
scalac
, с предварительной проверкой, и это был единственный способ, который я нашел, кроме измененияfjbg
самого себя.5. Помогает ли что-то вроде bcel? jakarta.apache.org/bcel/apidocs/org/apache/bcel/classfile/…
Ответ №1:
Javaasist поддерживает просмотр таблиц отображения стека.
Еще одним самородком, с которым я столкнулся, был java -XX:-FailOverToOldVerifier -Xverify: all, который должен проверять, есть ли SMT-информация в файле класса версии 50 . Однако я этого не пробовал и даже не могу сказать вам, как это может выглядеть на выходе.