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
Respuesta
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?
Esta publicación me hace querer fingir el trabajo que estoy haciendo hoy y jugar con Jasmin. :-) – corsiKa
+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
@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 ". –
Tal vez este artículo puede empezar: Bytecode basics (un poco viejo, pero se entiende la idea).
El class file format será muy útil también: D
+1 para la edición – Pops
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.
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. Endianness and Socket Programming in C
- 2. java bytecode editor?
- 3. ¿Es posible transformar el bytecode LLVM en bytecode de Java?
- 4. ejecutando bytecode jython usando java
- 5. Java: nueva instancia de bytecode
- 6. Java Bytecode Manipulation Library Sugerencias
- 7. Comportamiento diferente de bytecode java
- 8. Especificación de bytecode de Java
- 9. Java Game Programming: JOGL vs LWJGL?
- 10. Linear Programming Tool/Libraries for Java
- 11. Winsock Programming
- 12. Spartan Programming
- 13. Android Python Programming
- 14. Optimización del compilador: bytecode de Java
- 15. Java bytecode equivalentes para ilasm/ildasm
- 16. Eliminando instrucciones del bytecode de Java
- 17. Optimizaciones Java: solo bytecode contra JIT
- 18. Programming Data Types
- 19. Compilar con bytecode de java (sin usar Java)
- 20. cómo se representa la anotación java en java bytecode
- 21. Experiencias con D-programming-language
- 22. Twisted in Java
- 23. In-memory Java DB
- 24. String datatype in java
- 25. Assert keyword in java
- 26. Tipos en Bytecode
- 27. Java Socket Programming no funciona para 10,000 clientes
- 28. python web programming
- 29. Game Programming Library C++
- 30. Windows Firewall Programming
Lea https://docs.oracle.com/javase/specs/jvms/se7/html/index.html y use 'printf' en bash :-) –