# Bytecode ansehen



## MQue (20. Mrz 2008)

Hallo,

wie kann ich mir nochmal den Bytecode ansehen, ich muss ja da irgendwie die *.class- Datei sichtbar machen,
geht das irgendwie mit der IDE NetBeans?

lg


----------



## Marco13 (20. Mrz 2008)

Ich nehme an, du meinst
javap -c NameDerClassDateiAberOhneDateiendung

Das sind aber die Mnemonics. Der eigentliche Bytecode ist eine Folge von Zahlen. (Schreibe gerade ein Programm, dass das Zeuch liest, deswegen bin ich da vielleicht ein bißchen spitzfindeig :wink: )


----------



## Verjigorm (20. Mrz 2008)

mal ne blöde Frage:

was macht man mit den "Mnemonics"?
Habs mir grad mal angeschaut... lässt sich damit irgenwas interessantes anstellen?


----------



## MQue (20. Mrz 2008)

Kann man das mit der IDE NetBeans auch ansehen (die Mnemonics) und wie schaut das genau aus, was stellen die Mnemonics, Ich kenn das nur von Assembler, da ist ja auch 

Add
Mov
 usw.

die Mnemonics, also es müssen im Bytecode auch irgendwwelche Abkürzungen sein, aber für was oder liege ich da ganz falsch?


----------



## maki (20. Mrz 2008)

Das Gegenstück zu Mnenomic Code ist sog. Opcode, zumindest in Assembler.
Bei sind gleichwertig, nur eine andere Darstellung.

Mnemonics dienen dem Programmierer, da sie einfacher zu merken sind als Opcodes, denn letztere bestehen nur aus nur Hex Zahlen, ersteres sind Kürzel.


----------



## MQue (20. Mrz 2008)

Und was kann ich jetzt mit dem machen bzw. was kann ich aus dem herauslesen:


```
javap -c NewJFrame
Compiled from "NewJFrame.java"
public class javaapplication99.NewJFrame extends javax.swing.JFrame{
public javaapplication99.NewJFrame();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method javax/swing/JFrame."<init>":()V
   4:   aload_0
   5:   invokespecial   #2; //Method initComponents:()V
   8:   return

public static void main(java.lang.String[]);
  Code:
   0:   new     #28; //class javaapplication99/NewJFrame$1
   3:   dup
   4:   invokespecial   #29; //Method javaapplication99/NewJFrame$1."<init>":()V

   7:   invokestatic    #30; //Method java/awt/EventQueue.invokeLater:(Ljava/lan
g/Runnable;)V
   10:  return

}
```


----------



## maki (20. Mrz 2008)

> Und was kann ich jetzt mit dem machen bzw. was kann ich aus dem herauslesen:


Den Bytecode den der Compiler aus deinem Quelltext erzeugt hat.

Keine Angst, dass sind die Profis die damit etwas anfangen können.
Mir sagt das auch nix


----------



## MQue (20. Mrz 2008)

maki hat gesagt.:
			
		

> Keine Angst, dass sind die Profis die damit etwas anfangen können.
> Mir sagt das auch nix



Das glaub ich ja fast nicht  

Naja, vielleicht gibts ja eine Auflistung der Menmos


----------



## The_S (20. Mrz 2008)

Michael1234 hat gesagt.:
			
		

> Und was kann ich jetzt mit dem machen bzw. was kann ich aus dem herauslesen:



Du kannst herauslesen was der Compiler mit deinem Code gemacht hat. Z. B. siehst du so was der Compiler alles optimiert hat.

Wenn du nicht weißt, was du damit anfangen sollst, warum willst du ihn dir dann überhaut ansehen ???:L


----------



## MQue (20. Mrz 2008)

:shock: damit ich vielleicht in Zukunft besseren Code schreiben kann (so nach dem Umkehr- Prinzip)
     und weils mich interessiert, mal hinter die Kulissen zu schauen


----------



## quippy (20. Mrz 2008)

Oder suchst Du vielleicht "jad", ein Java Decompiler? Leider wird da wohl nicht dran weitergearbeitet - ich denke, java5 und größer kann der nicht immer korrekt darstellen...

Da gibt es übrigens für Eclipse ein Plugin für "jadclipse"


----------



## MQue (20. Mrz 2008)

für NetBeans auch??


----------



## Marco13 (20. Mrz 2008)

Ein Umkehrung (d.h. die Zuordnung der echten bytes zu den entsprechenden Mnemonics) gibt's hier
http://java.sun.com/docs/books/jvms/second_edition/html/Mnemonics.doc.html

Und was die einzelnen Befehle machen, steht hier
http://java.sun.com/docs/books/jvms/second_edition/html/Instructions.doc.html
bzw. alles in einer PDF-Datei
http://java.sun.com/docs/books/jvms/second_edition/Java5-Instructions2.pdf

Ob das dazu beiträgt, besseren code zu schreiben, ist aber fraglich - da sollte man sich keine Seiten über den Bytecode durchlesen (der ja eh noch vom Hotspot-Compiler verändert und optimiert wird), sondern eher über OOP...


----------



## quippy (20. Mrz 2008)

Michael1234 hat gesagt.:
			
		

> für NetBeans auch??


 K.A. Musst Du mal nach suchen...


----------

