JODEPowered by SourceForge
Best viewed with Any

FAQ - Frequently Asked Questions

This is a list of some questions that pop up from time to time.

Decompiler issues

The decompiler crashes with a VerifyException, what can I do?

The class isn't verifiable, probably because there is not enough information about used classes. See the question about the classpath.

This could also be caused by malicious bytecode, or because there is a bug in Jode's verifier.

What should be included in the classpath?

Jode needs to know the full class hierarchie to guess the types. This includes not only the classes in the program, but also the libraries used by the java program, even the Java runtime library. You should set the classpath to include all these classes.

If you don't specify the classpath on the command line, Jode uses the same as your Java Virtual Machine.

As last resort, if Jode can't find a class in the classpath it uses reflection to ask the Virtual Machine. This works quite well, but loading classes can have side effects, e.g. when AWT classes are loaded, an AWT thread is created, even though Jode doesn't need it.

Why doesn't Jode decompile my inner class MyClass$Inner.class?

You should decompile the outermost class (MyClass in this case). The produced code contains the inner class.

Obfuscator issues

What should be included in the classpath?

The program, all libraries, the Java runtime library. Don't omit a library even when you don't want to obfuscate it.

What should I preserve

The most common mistake is to preserve a class. In most cases this is not what you want. This only makes sure the class won't be renamed, it doesn't prevent it from being stripped. Instead you should preserve methods and constructors. The constructor is just a method with the special name <init>.

Another common mistake is to omit the type signature, e.g. to preserve Class.main instead of Class.main.([Ljava/lang/String;)V. That doesn't work. If you don't want to care about the format of the type signature use a wildcard as in Class.main.*.

What is a type signature

The type signature is a machine readable representation of a java type that is used all over in java bytecode. The JDK ships a command named javap. With java -s you can lists the fields and methods of a class with their type signatures.

If you are interested in the format of type signatures read the Java Virtual Machine Specification, Chapter 4.3 Descriptors