36

Is there a utility (or eclipse plugin) for editing java class files? I'd like to manipulate the bytecode of a java class file without recompiling it nor having a complete buildpath.

E.g. to rename methods, add/delete instructions, change constants etc.

The only utilities I found are:

  • classeditor but it's very limited in functionality (e.g. renaming of things and manipulating instructions isn't possible).

  • jbe doesn't save changes (maybe because class verifying fails - before I made any changes, although the class runs perfectly)

    (jbe initially had a classpath issue, adding the class path to the jbe.bat file helped)

Xstian
  • 8,184
  • 10
  • 42
  • 72
MRalwasser
  • 15,605
  • 15
  • 101
  • 147

4 Answers4

24

I use reJ for editing class files directly.

It allows you to edit instructions, methods, constant pool, diff classes, and a split view with a hex editor.

It's ridiculously awesome.

Eugene Loy
  • 12,224
  • 8
  • 53
  • 79
nahsra
  • 349
  • 1
  • 3
  • 10
  • reJ seems to be dead (last release took place in 2007) – MRalwasser Jun 17 '14 at 11:32
  • reJ would be awesome if editing worked. I've just tried to insert an "ifne" instruction that requires a parameter, I get a NullPointerException because its graphical user interface remains unfinished, it doesn't allow to pass the expected branch offset. Actually, I would advise to use reJ to display the instructions, Java Decompiler to check whether the changes are understood and a plain hexadecimal editor to edit the class file(s). – gouessej Feb 20 '18 at 10:24
  • By the way, JByteMod just works, it does what reJ fails to do: https://grax.info/ I've used it to patch JOGL 2.3.2 :) – gouessej Feb 20 '18 at 10:57
10

I have not seen any byte code -> byte code frontends, but plenty backends.

I would suggest that you have a look at the many byte code manipulation libraries like javassist which allow loading byte code, manipulate it, and save it back to disk, and then write a small main that does exactly that.

evandrix
  • 6,041
  • 4
  • 27
  • 38
Thorbjørn Ravn Andersen
  • 73,784
  • 33
  • 194
  • 347
9

I wrote an open source Java assembler and dissasembler you may find useful.

It lets you disassemble a classfile into human readable assembly, edit it, and then reassemble it into a class. It was originally designed for writing obfuscated crackmes, so there are a lot of obscure features it supports that many other tools don't. If you need any features it doesn't currently support, feel free to contact me and I'll see what I can do.

Antimony
  • 37,781
  • 10
  • 100
  • 107
3

Find this list of byte code manipulation/code generation libraries helpful?

Guy Sensei
  • 529
  • 3
  • 10
  • 1
    I need working tools, I don't have the time to code such a tool by myself (neither with the help of those libraries). – MRalwasser Jul 30 '10 at 13:39