Wartbarkeit, Stabilität und Effektivität

Verify Java-Class-Files

2013-01 23
Mi, 2013-01-23 21:36 -- lux

Wenn es einmal Probleme mit Java-Klassen gibt, sich ein jar-File nicht ausführen lässt, oder beim Deployment der Verifyer eine Klasse als korrupt bemängelt, kann es hilfreich sein die betreffende Klasse einmal zu prüfen. Um java-class-files zu verifizieren kann man sehr gut javassist.tools.Dump (Java Programming Assistant) nutzen:

java -cp javassist.jar javassist.tools.Dump <path-to-class-file>

Wenn die Integrität der Klasse gegeben ist, zeigt javassist.tools.Dump einen constant-pool der Klasse an

*** constant pool ***
1 Class #2
2 UTF8 "net/xilab/test/Main"
3 Class #4
4 UTF8 "java/lang/Object"
5 UTF8 "<init>"
6 UTF8 "()V"
7 UTF8 "Code"
8 Method #3, name&type #9
9 NameAndType #5, type #6
...

Wurde die Java-Klasse nach dem Kompilieren z. B. manipuliert, wirft javassist eine ähnliche Exception wie diese:

Exception in thread "main" java.io.IOException: invalid constant type: 59 at 27
    at javassist.bytecode.ConstPool.readOne(ConstPool.java:1236)
    at javassist.bytecode.ConstPool.read(ConstPool.java:1167)
    at javassist.bytecode.ConstPool.<init>(ConstPool.java:175)
    at javassist.bytecode.ClassFile.read(ClassFile.java:774)
    at javassist.bytecode.ClassFile.<init>(ClassFile.java:118)
    at javassist.tools.Dump.main(Dump.java:50)

QUELLEN