Is it possible to view bytecode of Class file?

80,872

Solution 1

Yes. You can use the javap command that's included with the JDK to see the byte code of a class. For example:

javap -c com.mypackage.MyClass

There are several libraries and tools that help you to work with Java bytecode, for example ASM and Jasmin.

Solution 2

The JDK comes with javap which is a tool to disassemble the byte code inside a class file. Editing on byte code level is possible. Have a look at BCEL, a java library designed to read, manipulate and write class files.

A list of tool and libraries to edit byte code can be found on java-net. For example JBE, a Java Byte Code editor that even comes with a GUI.

Solution 3

To view the bytecodes

Forget javap! The best plugin I have ever used is the "ASM - Bytecode Outline plugin for Eclipse"

http://asm.ow2.org/eclipse/index.html

It is from ASM (a bytecode manipulation framework).

It shows the bytecodes (that you asked for), stack elements (jvm style), and how to generate the same result (to produce the same bytecodes) using the asm framework methods.

Better still is the fact that it does so while you have the source code selected. You don't have to find the .class file in the bin directory to inspect it's bytecode.

To edit them

Using code:

  • ASM: Visitors based, very, very fast.
  • BCEL: Loads the bytecode as an in memory description of the class file.
  • Javassit: the easiest one to use, allows you to do pattern matching and expression replacement.

By hand: JBE

Solution 4

To my experience, jclasslib is one of the best bytecode viewers.

As for editors, there are two types: bytecode manipulation libraries, and editors with GUIs. This question has been asked few times on SO, you could check the answers and the links that were provided.

Just be careful that editing bytecode in not as straightforward as you think. The JVMS imposes many restrictions on how class files should be, and there is a great chance that one of your edit will violate one of them.

Check these other questions:

Editing a .class file directly, playing around with opcodes

Is it possible to view bytecode of Class file?

Programming in Java bytecode

Share:
80,872

Related videos on Youtube

Abhishek Jain
Author by

Abhishek Jain

Updated on July 08, 2022

Comments

  • Abhishek Jain
    Abhishek Jain almost 2 years

    Possible Duplicate:
    Is there a java classfile / bytecode editor to edit instructions?

    Java source code is compiled into bytecode, which is actually in the class file. Is it possible to view bytecode of a compiled class?

    If it is possible, can it be edited?

    Is there an eclipse plugin for that available?

    • krock
      krock almost 14 years
      Check out this question for java byte code editors.
    • matbrgz
      matbrgz almost 14 years
      What is the underlying problem you need to solve?
    • zengr
      zengr almost 14 years
      I am also interested in @Thorbjørn's question. @Abhishek What information are you seeking in the class file? or just out of curiosity?
    • Brian
      Brian about 9 years
      I found a website which allows you to input java code and get the bytecode as the output. nodejs-instantbytecode.rhcloud.com
    • absmiths
      absmiths about 6 years
      I had this need for creating a forked java process which could delegate to the class loader in this process without having to override it. If you implement your own classloader, you get to load the bytecode into a class. But, if you start with a class you can't convert it to bytecode for shipping to an external process. My need was to get it at runtime - not view/modify it for curiosity.
  • Martín Schonaker
    Martín Schonaker over 13 years
    +1 I've used BCEL and ASM, ASM is neat. It has a visitor to decompile into the console already there. I mean, it's more capable that javap. The Eclipse plugin rocks. It's very fast!
  • Chih-Hsuan Yen
    Chih-Hsuan Yen about 8 years
    By default private methods are not included. Use -p to include them as well.
  • nikodaemus
    nikodaemus over 7 years
    Failed installation on Mars 2 (4.5.2) =( It attempted some compatibility fixes but ultimately it didn't work
  • Daniel Sperry
    Daniel Sperry over 7 years
    Eclipse? Try Intellij it also as an ASM plugin
  • Helder Pereira
    Helder Pereira about 6 years
    For me only worked with the file name (extension seems to be optional though), but not with the fully qualified class name: javap -c -p MyClass.class
  • Jose1755
    Jose1755 almost 6 years
    javap -c com.mypackage.MyClass will print the code on the terminal(stdout). I prefer javap -c -p com.mypackage.MyClass >> com.mypackage.MyClass.txt to see the code in a file.