reJ Features

Classfile inspection

reJ offers many tools for inspection of classfiles.

Structure view

Offers a structural view of a classfile, it's attributes, fields and methods.

Structure View

Bytecode Editor

The most powerful part of reJ. A class is displayed in a java source-like format with syntax coloring in the style of the Eclipse IDE. Class definition, extended class, implemented interfaces are all shown in a java source format.

Annotations, fields (including constant values) and method definitions are shown in a java source-like format with syntax coloring.

The bytecode in the methods is also syntax colored, and references to constant pool indexes are translated into corresponding values.

Bytecode Editor

Search

The search funcionality searches all the class files in the project. Hits are shown in a list and each results acts as a link which takes the user to the file and position of the hit.

Search

Compare

reJ also allows comparing two "projects", that is, two archive files, two folders, two single files. It lists files that are only present in one of the members of the comparison and for files present in both sets it does a Java-intelligent compare.

Compare

Classfile manipulation

A big part of reJ is the ability to modify the classfiles. Removing, inserting and modifying of classes, fields, methods and bytecode instructions is trivial with reJ.

Constant Pool

Shows the contents of the constant pool of a class file. This is a very central part of a classfile where all references to String and basic type constants, class, field, and method names are contained. The current version of reJ allows the modification and insertion of String constants and UTF-8 constants (which can be used to modify class, method and field name references).

Constant Pool

Bytecode Editor

The Bytecode Editor which is already described above in the inspection section also provides the user with a wide range of modification of the classfile.

Class definition

The class name can be changed. The class access flags can be modified. The implemented interfaces and extended class can be altered. A project-wide refactoring of the class name is also possible - this renames the class and all the references to the class in the entire project.

Class Editor
Field definitions

New fields can be created. Fields can be removed. Field name, type and access flags can be modified. A project wide refactoring of the method name is also available.

Field Editor
Method definitions

New methods can be added. Methods can be removed. Method name, return type, parameters, list of the exceptions the method can throw and acccess flags can be modified. A project wide refactoring of the method name is possible, too.

Method Editor

New instructions may be added to the method, old ones may be removed, rearranged and modified.

Instruction Editor

Obfuscation

Some basic obfuscation options are also available. These include:

-Stripping linenumber information

-Stripping variable names

-Renaming classes

Debug

reJ comes with the ability to debug bytecode execution. The idea is to support debugging even when there are no souces available. Breakpoints may be set in the bytecode and controls are available for stepping through the bytecode.