Как проверить, была ли предварительно проверена версия файла класса 50.0 (Java 6)?

#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 . Однако я этого не пробовал и даже не могу сказать вам, как это может выглядеть на выходе.