Suggest a feature
×

Welcome to TagMyCode

Please login or create account to add a snippet.
0
0
 
0
Language: Java
Posted by: Jordan Makris
Added: Mar 25, 2018 8:24 AM
Views: 22
Uses Objectwebs ASM to load classes as classnodes
  1. public static ArrayList<ClassNode> loadClasses(final File jarFile) throws IOException {
  2.         ArrayList<ClassNode> classes = new ArrayList<ClassNode>();
  3.         ZipInputStream jis = new ZipInputStream(new FileInputStream(jarFile));
  4.         ZipEntry entry;
  5.         while ((entry = jis.getNextEntry()) != null) {
  6.             try {
  7.                 final String name = entry.getName();
  8.                 if (name.endsWith(".class")) {
  9.                     byte[] bytes = getBytes(jis);
  10.                     String cafebabe = String.format("%02X%02X%02X%02X", bytes[0], bytes[1], bytes[2], bytes[3]);
  11.                     if(cafebabe.toLowerCase().equals("cafebabe")) {
  12.                         try {
  13.                             final ClassNode cn = getNode(bytes);
  14.                             classes.add(cn);
  15.                         } catch(Exception e) {
  16.                             e.printStackTrace();
  17.                         }
  18.                     } else {
  19.                         System.out.println(jarFile+">"+name+": Header does not start with CAFEBABE, ignoring.");
  20.                     }
  21.                 }
  22.  
  23.             } catch(Exception e) {
  24.  
  25.             } finally {
  26.                 jis.closeEntry();
  27.             }
  28.         }
  29.         jis.close();
  30.         return classes;
  31. }