Como faço para ler bytecodes?

Alguém sabe alguma forma de ler os bytecodes de um .class? Quando eu abro ele no vim (ou qualquer outro editor), aparecem vários caracteres estranhos e o código fica ilegível. Tenho certeza que existe alguma forma de ler bytecodes, pois tem muita gente que resolve problemas olhando o código gerado neles.

Obrigado!

Procure por cavaj

Você pode ler o código em assembly da jvm:

javac Teste.java:

public class Teste { public static void main(String[] args) { System.out.println("Se eu pudesse matava mil, mil, mil. Que eu so caba Homi. Mato inte o delegado."); } }

javap -c Teste:

[code]Compiled from “Teste.java”
public class Teste extends java.lang.Object{
public Teste();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."":()V
4: return

public static void main(java.lang.String[]);
Code:
0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3; //String Se eu pudesse matava mil, mil, mil. Que eu so caba Homi. Mato inte o delegado.
5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return

}[/code]

saida com hexadump do Teste.class (man hexadump/hd no seu linux para mais opcoes): (Somente pra quem é caba Homi)

0000000 feca beba 0000 3200 1d00 000a 0006 090f 0000010 1000 1100 0008 0a12 1300 1400 0007 0715 0000020 1600 0001 3c06 6e69 7469 013e 0300 2928 0000030 0156 0400 6f43 6564 0001 4c0f 6e69 4e65 0000040 6d75 6562 5472 6261 656c 0001 6d04 6961 0000050 016e 1600 5b28 6a4c 7661 2f61 616c 676e 0000060 532f 7274 6e69 3b67 5629 0001 530a 756f 0000070 6372 4665 6c69 0165 0a00 6554 7473 2e65 0000080 616a 6176 000c 0007 0708 1700 000c 0018 0000090 0119 4e00 6553 6520 2075 7570 6564 7373 00000a0 2065 616d 6174 6176 6d20 6c69 202c 696d 00000b0 2c6c 6d20 6c69 202e 7551 2065 7565 7320 00000c0 206f 6163 6162 4820 6d6f 2e69 4d20 7461 00000d0 206f 6e69 6574 6f20 6420 6c65 6765 6461 00000e0 2e6f 0007 0c1a 1b00 1c00 0001 5405 7365 00000f0 6574 0001 6a10 7661 2f61 616c 676e 4f2f 0000100 6a62 6365 0174 1000 616a 6176 6c2f 6e61 0000110 2f67 7953 7473 6d65 0001 6f03 7475 0001 0000120 4c15 616a 6176 692f 2f6f 7250 6e69 5374 0000130 7274 6165 3b6d 0001 6a13 7661 2f61 6f69 0000140 502f 6972 746e 7453 6572 6d61 0001 7007 0000150 6972 746e 6e6c 0001 2815 6a4c 7661 2f61 0000160 616c 676e 532f 7274 6e69 3b67 5629 2100 0000170 0500 0600 0000 0000 0200 0100 0700 0800 0000180 0100 0900 0000 1d00 0100 0100 0000 0500 0000190 b72a 0100 00b1 0000 0001 000a 0000 0006 00001a0 0001 0000 0001 0009 000b 000c 0001 0009 00001b0 0000 0025 0002 0001 0000 b209 0200 0312 00001c0 00b6 b104 0000 0100 0a00 0000 0a00 0200 00001d0 0000 0300 0800 0400 0100 0d00 0000 0200 00001e0 0e00 00001e2

Voce quer ler o código-fonte a partir do class?

Se for o caso use o cajav como o Vini indicou.

[quote=Mark_Ameba]Voce quer ler o código-fonte a partir do class?

Se for o caso use o cajav como o Vini indicou.[/quote]

Não. Eu não gostaria de recuperar o source code, mas sim ler os bytecodes mesmo. Fiz a sujestão do GradeBook e deu certo. Se alguém souber de outro método, por favor, poste aqui.

Javassist te ajuda a manipular os bytecodes.

Assim como varias outras byte code libs.