maroph

Python3: get Java class file major/minor version

Sep 26th, 2018 (edited)
293
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.00 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. # extract major/minor version number from a given class file
  3. import os
  4. import sys
  5.  
  6. if len(sys.argv) < 2:
  7.     print("class file name missing")
  8.     sys.exit(1)
  9.  
  10. classfile = sys.argv[1]
  11.  
  12. if not os.path.isfile(classfile):
  13.     print("class file " + classfile + " does not exist")
  14.     sys.exit(1)
  15.  
  16. with open(classfile,"rb") as f:
  17.     ba = f.read(8)
  18.  
  19.     if len(ba) < 8:
  20.         print("given file is not a class file")
  21.         sys.exit(1)
  22.  
  23.     if ba[0] != 0xca or ba[1] != 0xfe or ba[2] != 0xba or ba[3] != 0xbe:
  24.         print("given file is not a class file")
  25.         sys.exit(1)
  26.  
  27.     major = int(ba[6]) << 8 | int(ba[7])
  28.     minor = int(ba[4]) << 8 | int(ba[5])
  29.  
  30.     # dictionary: (Java class file major version, Java version)
  31.     # OpenJDK distributions:
  32.     # AdoptOpenJDK : https://adoptopenjdk.net/ (before July 2021)
  33.     # Adoptium     : https://adoptium.net/     (from July 2021 on)
  34.  
  35.     javaDict = {
  36.         63: "Java 19 (Adoptium Support: MAR-2023)",
  37.         62: "Java 18 (Adoptium Support: SEP-2022)",
  38.         61: "Java 17 (LTS: Adoptium Support: >= OCT-2027)",
  39.         60: "Java 16 (Adoptium Support: SEP-2021)",
  40.         59: "Java 15 (AdoptOpenJDK Support: MAR-2021)",
  41.         58: "Java 14 (AdoptOpenJDK Support: SEP-2020)",
  42.         57: "Java 13 (AdoptOpenJDK Support: MAR-2020)",
  43.         56: "Java 12 (AdoptOpenJDK Support: SEP-2019)",
  44.         55: "Java 11 (LTS: Adoptium Support: >= OCT-2024)",
  45.         54: "Java 10 (AdoptOpenJDK Support: SEP-2018)",
  46.         53: "Java 9 (AdoptOpenJDK Support: MAR-2018)",
  47.         52: "Java 8 (1.8 - LTS: Adoptium Support: >= NOV-2026)",
  48.         51: "Java 7 (1.7)",
  49.         50: "Java 6 (1.6)",
  50.         49: "Java 5 (1.5)",
  51.         48: "Java 1.4",
  52.         47: "Java 1.3",
  53.         46: "Java 1.2",
  54.         45: "Java 1.0/1.1"
  55.     }
  56.  
  57.     if major in javaDict:
  58.         java = javaDict[major]
  59.     else:
  60.         java  = "unknown"
  61.  
  62.     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