47 votes

Programmation en bytecode Java

Je cherche à écrire un programme court (peut-être un Hello World) en bytecode Java. Je veux juste écrire le bytecode en utilisant mon éditeur de texte et l'exécuter. Comment faire ? Vous avez un exemple ? Merci de votre compréhension.

0 votes

Lire docs.oracle.com/javase/specs/jvms/se7/html/index.html et utiliser printf en bash :-)

46voto

Adam Paynter Points 22056

Vous pouvez essayer Jasmin ¡!

.class public HelloWorld
.super java/lang/Object

.method public static main([Ljava/lang/String;)V
  .limit stack 3
  .limit locals 1

  getstatic      java/lang/System/out Ljava/io/PrintStream;
  ldc            "Hello World."
  invokevirtual  java/io/PrintStream/println(Ljava/lang/String;)V

  return

.end method

Vous le compilez en utilisant :

\> java -jar jasmin.jar hello.j

Ensuite, vous l'exécutez comme n'importe quelle autre classe :

\> java HelloWorld
Hello World.

Mise à jour

Je vois que votre question mentionne "sans utiliser Javac ou Java". Pourriez-vous préciser ce que vous entendez par là ?

8 votes

Ce billet me donne envie de faire semblant de travailler aujourd'hui et de bricoler avec Jasmin :-)

0 votes

+1 Jasmin est ce qui m'est venu à l'esprit et je ne me souvenais pas du nom. Il a été présenté dans un livre qui explique les internes de la JVM. J'ai oublié le nom du livre aussi, soupir ...

1 votes

@Bakkal : D'après le lien : "Jasmin a été créé à l'origine pour accompagner le livre "Java Virtual Machine", écrit par Jon Meyer et Troy Downing et publié par O'Reilly Associates.

11voto

Antimony Points 13190

J'ai créé un nouveau Assembleur de bytecode Java qui est rétrocompatible avec Jasmin, mais qui ajoute de nombreuses nouvelles fonctionnalités et simplifie légèrement la syntaxe.

Voici un exemple de la façon dont vous pourriez écrire un programme Hello World.

.class public hello
.super java/lang/Object

.method public static main : ([Ljava/lang/String;)V
    .limit stack 10
    .limit locals 10

    getstatic java/lang/System out Ljava/io/PrintStream;
    ldc "Hello World!"
    invokevirtual java/io/PrintStream println (Ljava/lang/Object;)V
    return
.end method

J'ai également écrit un tutoriel sur l'assemblage du bytecode . Pour l'instant, il ne couvre que Hello, World, mais je peux continuer s'il y a de l'intérêt.

3 votes

Le lien est cassé

0 votes

Je m'en excuse. Il semble que tout le wiki ait disparu. Je vais leur envoyer un courriel pour voir s'ils peuvent le ramener ou s'ils ont des copies.

9voto

Le code octet est écrit sous forme d'octets réels, qui ne sont normalement pas facilement modifiables par un éditeur de texte normal.

Cela signifie que vous aurez besoin d'un outil qui convertit une représentation textuelle en binaire. Un assembleur tel que Jasmin .

8voto

bjg Points 6448

Avez-vous envisagé JBE (Éditeur de bytecode Java) ?
Il est basé sur la bibliothèque d'ingénierie du bytecode d'Apache ( BCEL )

8voto

Cet article peut peut-être vous aider à démarrer : Les bases du bytecode (c'est un peu vieux, mais vous voyez l'idée).

Les format du fichier de classe sera également utile :D

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X