Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- # extract major/minor version number from a given class file
- import os
- import sys
- if len(sys.argv) < 2:
- print("class file name missing")
- sys.exit(1)
- classfile = sys.argv[1]
- if not os.path.isfile(classfile):
- print("class file " + classfile + " does not exist")
- sys.exit(1)
- with open(classfile,"rb") as f:
- ba = f.read(8)
- if len(ba) < 8:
- print("given file is not a class file")
- sys.exit(1)
- if ba[0] != 0xca or ba[1] != 0xfe or ba[2] != 0xba or ba[3] != 0xbe:
- print("given file is not a class file")
- sys.exit(1)
- major = int(ba[6]) << 8 | int(ba[7])
- minor = int(ba[4]) << 8 | int(ba[5])
- # dictionary: (Java class file major version, Java version)
- # OpenJDK distributions:
- # AdoptOpenJDK : https://adoptopenjdk.net/ (before July 2021)
- # Adoptium : https://adoptium.net/ (from July 2021 on)
- javaDict = {
- 63: "Java 19 (Adoptium Support: MAR-2023)",
- 62: "Java 18 (Adoptium Support: SEP-2022)",
- 61: "Java 17 (LTS: Adoptium Support: >= OCT-2027)",
- 60: "Java 16 (Adoptium Support: SEP-2021)",
- 59: "Java 15 (AdoptOpenJDK Support: MAR-2021)",
- 58: "Java 14 (AdoptOpenJDK Support: SEP-2020)",
- 57: "Java 13 (AdoptOpenJDK Support: MAR-2020)",
- 56: "Java 12 (AdoptOpenJDK Support: SEP-2019)",
- 55: "Java 11 (LTS: Adoptium Support: >= OCT-2024)",
- 54: "Java 10 (AdoptOpenJDK Support: SEP-2018)",
- 53: "Java 9 (AdoptOpenJDK Support: MAR-2018)",
- 52: "Java 8 (1.8 - LTS: Adoptium Support: >= NOV-2026)",
- 51: "Java 7 (1.7)",
- 50: "Java 6 (1.6)",
- 49: "Java 5 (1.5)",
- 48: "Java 1.4",
- 47: "Java 1.3",
- 46: "Java 1.2",
- 45: "Java 1.0/1.1"
- }
- if major in javaDict:
- java = javaDict[major]
- else:
- java = "unknown"
- print("major: 0x%04x (%d) , minor: 0x%04x (%d) , version: %s" % (major, major, minor, minor, java))
Advertisement
Add Comment
Please, Sign In to add comment