I'm looking to write a short program (maybe a Hello World) in Java bytecode. I just want to write the bytecode using my text editor and run it. How would I do this? Got an example? Thanks!
-
Read https://docs.oracle.com/javase/specs/jvms/se7/html/index.html and use `printf` in bash :-) – Ciro Santilli OurBigBook.com Jul 11 '15 at 10:23
3 Answers
You could try 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
You compile it using:
> java -jar jasmin.jar hello.j
And then you run it like any class:
> java HelloWorld Hello World.
Update
I see that your question mentions "without using Javac or Java". Could you clarify how you meant that statement?

- 46,244
- 33
- 149
- 164
-
8This post makes me want to fake the work I'm doing today and tinker around with Jasmin. :-) – corsiKa Jun 30 '10 at 14:47
-
+1 Jasmin is what came to my mind and I couldn't remember the name. It was featured in a book that explains JVM internals. I Forget the name of the book too, *sigh*... – bakkal Jun 30 '10 at 14:48
-
1@Bakkal: According to the link: "Jasmin was originally created as a companion to the book "Java Virtual Machine", written by Jon Meyer and Troy Downing and published by O'Reilly Associates." – Adam Paynter Jun 30 '10 at 14:50
-
by "without using Javac or Java," I just meant that I want to write the code using bytecode. Thanks for the info! – Corey Stevens Jun 30 '10 at 15:06
-
wow~ This is super cool. is this JVM independent as well? can this run on a blackberry jvm? – Viele Jun 30 '10 at 15:36
-
@Viele: Yes, this should be JVM independent (so long as the JVM you're interested in conforms to the JVM specification). – Adam Paynter Jun 30 '10 at 16:28
-
@Corey, how is this different from using a plan `.java` file and `javac` ? – OscarRyz Jun 30 '10 at 17:42
-
Wow!! I've been working for a while on bytecode. Why haven't I heard of this? – H-H Jul 01 '10 at 08:24
-
Jasmin is ok for ordinary use, but it doesn't support a lot of the more obscure things you can do in classfiles. If you want a heavy duty assembler see my answer. – Antimony May 30 '13 at 03:36
I've created a new Java bytecode assembler that is backwards compatible with Jasmin but also adds lots of new features and simplifies the syntax slightly.
Here's an example of how you might write a Hello World program.
.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. It currently only covers Hello, World, but I can continue it if there is interest.

- 37,781
- 10
- 100
- 107
-
3
-
Sorry about that. It looks like the whole wiki is gone. I'll email them to see if they can bring it back or have any copies. – Antimony Nov 10 '17 at 20:48
Byte code is written as actual bytes, which are not normally easily editable by a normal text editor.
This means you will need something that converts a textual representation to binary. A reasonable place to start would be an assembler like Jasmin.

- 31,832
- 25
- 83
- 114

- 73,784
- 33
- 194
- 347