Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2045 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Du ByteCode à l'Opcode

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Du ByteCode à l'Opcode

n°1501730
Leleninist​e
Posté le 11-01-2007 à 14:51:15  profilanswer
 

Bonjour à tous,
 
Est-il possible d'obtenir l'opcode d'un fichier .class, entre d'autres mots, est-il possible de passer du bytecode à l'opcode et de pouvoir visualiser cet opcode.
 
Cette question vient d'un projet, ce dernier doit afficher l'etat des piles, tas... de la machine virtuelle en en lisant en fichier .class.
 
En vous remerciant.

mood
Publicité
Posté le 11-01-2007 à 14:51:15  profilanswer
 

n°1505506
leonhard
Posté le 21-01-2007 à 11:33:43  profilanswer
 

Si j'ai bien compris ce que tu veux c'est un "decompiler"... Normalement avec le sdk de java, il y a le programme javap qui pourrait t'aider... sinon un petit coup de "java decompiler" sur google devrait de donner des résultats intéressants.
 
A tites d'exemple, l'output de javap donne :

Code :
  1. public static double readDouble();
  2.   Code:
  3.    0:   aconst_null
  4.    1:   astore_0
  5.    2:   iconst_0
  6.    3:   istore_2
  7.    4:   invokestatic    #5; //Method readLine:()Ljava/lang/String;
  8.    7:   astore_1
  9.    8:   aload_1
  10.    9:   invokestatic    #18; //Method java/lang/Double.valueOf:(Ljava/lang/String;)Ljava/lang/Double;
  11.    12:  astore_0
  12.    13:  iconst_1
  13.    14:  istore_2
  14.    15:  goto    19
  15.    18:  astore_3
  16.    19:  iload_2
  17.    20:  ifeq    4
  18.    23:  aload_0
  19.    24:  invokevirtual   #19; //Method java/lang/Double.doubleValue:()D
  20.    27:  dreturn
  21.   Exception table:
  22.    from   to  target type
  23.      8    15    18   Class java/lang/NumberFormatException

n°1505582
masklinn
í dag viðrar vel til loftárása
Posté le 21-01-2007 à 16:08:35  profilanswer
 

leonhard a écrit :

Si j'ai bien compris ce que tu veux c'est un "decompiler"... Normalement avec le sdk de java, il y a le programme javap qui pourrait t'aider... sinon un petit coup de "java decompiler" sur google devrait de donner des résultats intéressants.
 
A tites d'exemple, l'output de javap donne :

Code :
  1. public static double readDouble();
  2.   Code:
  3.    0:   aconst_null
  4.    1:   astore_0
  5.    2:   iconst_0
  6.    3:   istore_2
  7.    4:   invokestatic    #5; //Method readLine:()Ljava/lang/String;
  8.    7:   astore_1
  9.    8:   aload_1
  10.    9:   invokestatic    #18; //Method java/lang/Double.valueOf:(Ljava/lang/String;)Ljava/lang/Double;
  11.    12:  astore_0
  12.    13:  iconst_1
  13.    14:  istore_2
  14.    15:  goto    19
  15.    18:  astore_3
  16.    19:  iload_2
  17.    20:  ifeq    4
  18.    23:  aload_0
  19.    24:  invokevirtual   #19; //Method java/lang/Double.doubleValue:()D
  20.    27:  dreturn
  21.   Exception table:
  22.    from   to  target type
  23.      8    15    18   Class java/lang/NumberFormatException



Non, ce qu'il veut c'est pouvoir obtenir les opcodes depuis le bytecode, les opcodes étant le code exécuté par le processeur.
 
Leleniniste > je doute qu'il soit parfait (me semble qu'il y a pas mal de trucs pas encore implémentés) et il ne sort sûrement pas les même opcodes que la JVM officielle, mais GCJ est capable de compiler des .java et .class en code natif, tu peux probablement décompiler les executables derrière pour obtenir le bytecode.
 
Sinon, tu peux aussi essayer de voir dans l'implémentation de la JVM même (elle est passée OSS non?) de quelle manière elle fonctionne.
Alternative à la JVM officielle, il y a aussi Kaffe, une VM java avec JIT.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Du ByteCode à l'Opcode

 

Sujets relatifs
Gestion des collisions avec OPCODE[ASM] Génération d'opcode
[JAVA] Cherche compilateur bytecode -> language machine 
Plus de sujets relatifs à : Du ByteCode à l'Opcode


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR