2010-06-30 15 views
44

Estoy buscando escribir un programa corto (tal vez un Hello World) en bytecode de Java. Solo quiero escribir el bytecode usando mi editor de texto y ejecutarlo. ¿Cómo haría esto? ¿Tienes un ejemplo? ¡Gracias!Programming in Java bytecode

+0

Lea https://docs.oracle.com/javase/specs/jvms/se7/html/index.html y use 'printf' en bash :-) –

Respuesta

42

Usted podría intentar 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 

se compila usando:

 
> java -jar jasmin.jar hello.j 

Y luego lo ejecuta como cualquier clase:

 
> java HelloWorld 
Hello World. 

actualización

veo que tu pregunta menciona "sin usando Javac o Java ". ¿Podría aclarar cómo se refería a esa declaración?

+6

Esta publicación me hace querer fingir el trabajo que estoy haciendo hoy y jugar con Jasmin. :-) – corsiKa

+0

+1 Jasmin es lo que se me vino a la mente y no recuerdo el nombre. Fue presentado en un libro que explica las funciones internas de JVM. También olvidé el nombre del libro, * suspiro * ... – bakkal

+0

@Bakkal: Según el enlace: "Jasmin fue creado originalmente como un compañero del libro" Máquina virtual Java ", escrito por Jon Meyer y Troy Downing y publicado por O'Reilly Associates ". –

8

¿Ha considerado JBE (Java Bytecode Editor)?
Está basado en código de bytes Biblioteca de Ingeniería de Apache (BCEL)

+0

typo: es BCEL. De lo contrario, gran editor –

7

El código de bytes se escribe como bytes reales, que normalmente no son editables fácilmente por un editor de texto normal.

Esto significa que necesitará algo que convierta una representación textual a binaria. Un lugar razonable para comenzar sería un ensamblador como Jasmin.

8

He creado un nuevo Java bytecode assembler que es compatible con Jasmin pero también agrega muchas características nuevas y simplifica la sintaxis ligeramente.

Aquí hay un ejemplo de cómo podrías escribir un programa 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 

I've also written a tutorial on bytecode assembly. Actualmente solo cubre Hello, World, pero puedo continuar si hay interés.

+1

el enlace está roto – Manza

+0

Disculpa. Parece que todo el wiki se ha ido. Les enviaré un correo electrónico para ver si pueden devolverlo o tener copias. – Antimony