Dumping Java Class Files

I wrote some code a while back to dump out Java class files (actually to parse Java class files) so that I could manipulate them in mysterious ways. Basically before I left Sun I was working on a least privilege security model for Java and I needed to write a class loader that could return a 'neutered' class to an untrusted application, this code was used to test out some of these ideas. Obviously it isn't very polished but then again it's free.

One of the things these classes do are collect the class refs in a class file. This makes it trivial to provide a complete collection of all classes referenced by any base class by following all of the references. If someone does this, please mail me the result. When someone starts shipping n editor that is programmed in Java I'll write a class to automatically add syntax highlighting to user method and variables.

The classes are as follows (the tar file has a symantec project file that could build them as well):

ClassFile.java
This is the main class, it reads in a class file and parses its contents. Set the debug flag for verbose output.
AttributeInfo.java
The AttributeInfo.java class defines the class for and Attribute in the class file. It encapsulates the method for parsing an optional class file attribute.
MethodInfo.java
MethodInfo.java defines the class for parsing method blocks. If you want to add a disassembler like javap has, this is where you would plug it in.
FieldInfo.java
FieldInfo.java parse fields (instance variables) in the class file.
ConstantPoolInfo.java
This class deals with constant pool entries.
dumpclass.java
This is a very primitive example program that opens a class file, reads it in, and then dumps it out. Mostly it shows how you can use the ClassFile class.

A tar file of all of the classes is also here, there is a Symantec cafe project file as well (I don't know how well these things travel). You should be able to untar the files, cd to the dumpclass directory and type java dumpclass dumpclass.class.

The code is free for non-commercial use, if you use it in a product you can get a non-exclusive royalty free license by sending one copy of your product to me. License applies only to the shipped version, does not include the right to relicense and must be renewed when substantaially revised versions of the product are shipped.

[Copyright 1994-2004 Charles McManis, All Rights Reserved]

Back to the Java Stuff