Как я могу найти целевую версию Java для скомпилированного класса?

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

12
задан Community 23 May 2017 в 10:29
поделиться

4 ответа

Я нашел это в сети, и она работает.

Каждый .class 'файл начинается со следующим:

  • Магическое число [4 байта]
  • Информация о версии [4 байта]

hexdump .class 'файл, скомпилированный с каждой из следующих опций, показывает:

javac -target 1.1 ==> CA FE BA BE 00 03 00 2D
javac -target 1.2 ==> CA FE BA BE 00 00 00 2E
javac -target 1.3 ==> CA FE BA BE 00 00 00 2F
javac -target 1.4 ==> CA FE BA BE 00 00 00 30

Возможно, Вы могли использовать эту информацию для записи собственного .class 'утилита проверки версии файла, с помощью Java, или возможно сценариев или языка оболочки ;)!

Я надеюсь, что это помогает.

Anthony Borla

От: http://bytes.com/groups/java/16603-how-determine-java-bytecode-version

23
ответ дан 2 December 2019 в 02:53
поделиться

Можно использовать javap утилиту, которая идет со стандартным JDK.

javap -verbose MyClass

Compiled from “MyClass.java”
public class MyClass extends java.lang.Object
SourceFile: “MyClass.java”
minor version: 3
major version: 45
39
ответ дан 2 December 2019 в 02:53
поделиться

Взятый от: http://twit88.com/blog/2008/09/22/java-check-class-version/

try {
    String filename = "C:\\MyClass.class";
    DataInputStream in = new DataInputStream(new FileInputStream(filename));
    int magic = in.readInt();
    if (magic != 0xcafebabe) {
        log.info(filename + " is not a valid class!");
    }
    int minor = in.readUnsignedShort();
    int major = in.readUnsignedShort();
    log.info(filename + ": " + major + " . " + minor);
    in.close();
} catch (IOException e) {
    log.info("Exception: " + e.getMessage(), e);
}
3
ответ дан 2 December 2019 в 02:53
поделиться

Можно посмотреть на байтовое смещение 6 и 7 в файле (в шестнадцатеричном дампе, вероятно), который говорит Вам, какая версия используется. Я думаю Байт-код Visualizer (затмите плагин), видьте, которые присваивают версию файлу класса, сделан для.

Дальнейшее чтение

0
ответ дан 2 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: