web-dev-qa-db-fra.com

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 je ferais ça? Vous avez un exemple? Merci!

45
Corey Stevens

Tu pourrais 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 

Et ensuite vous le lancez comme n'importe quelle classe:

> Java HelloWorld 
 Bonjour tout le monde. 

Mise à jour

Je vois que votre question mentionne "sans utiliser Javac ou Java". Pourriez-vous préciser comment vous entendez cette déclaration?

42
Adam Paynter

J'ai créé un nouvel assembleur de bytecode Java qui est rétro-compatible avec Jasmin, mais qui ajoute également de nombreuses nouvelles fonctionnalités et simplifie légèrement la syntaxe.

Voici un exemple de la manière 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 de bytecode . Il ne couvre actuellement que Bonjour, Monde, mais je peux le poursuivre s’il ya un intérêt.

9
Antimony

Le code d'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 de quelque chose qui convertit une représentation textuelle en binaire. Un endroit raisonnable pour commencer serait un assembleur comme Jasmin .

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

8
bjg

Peut-être que cet article peut vous aider à démarrer: Notions de base sur Bytecode (un peu vieux, mais vous aurez l’idée).

Le format de fichier class sera également utile: D

8
user159088

Ce gars vous guide ici tout au long du processus d’écriture pas à pas d’un fichier de classe d’un programme hello world. Des choses très excitantes :-) https://medium.com/@davethomas_9528/writing-hello-world-in-Java-byte-code-34f75428e0ad

0
Peter Perháč