2010-06-30 8 views
44

Я ищу для написания короткой программы (возможно, Hello World) в байт-коде Java. Я просто хочу написать байт-код с помощью текстового редактора и запустить его. Как мне это сделать? Есть пример? Благодаря!Программирование на Java bytecode

+0

Прочтите https://docs.oracle.com/javase/specs/jvms/se7/html/index.html и используйте 'printf' в bash :-) –

ответ

42

Вы можете попробовать 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 

Вы скомпилировать его с помощью:

 
> java -jar jasmin.jar hello.j 

А потом запустить его, как и любой класс:

 
> java HelloWorld 
Hello World. 

Update

Я вижу, что ваш вопрос упоминает «без используя Javac или Java ». Не могли бы вы пояснить, как вы имели в виду это заявление?

+6

Это сообщение заставляет меня хотеть подделать работу, которую я делаю сегодня, и возиться с Джасмином. :-) – corsiKa

+0

+1 Ясмин пришел в голову, и я не мог вспомнить имя. Это было описано в книге, в которой объясняются внутренние элементы JVM. Я также забыл название книги * sigh * ... – bakkal

+0

@Bakkal: Согласно ссылке: «Jasmin был первоначально создан как компаньон к книге« Виртуальная машина Java », написанной Джоном Майером и Трой Даунинг и опубликованной O'Reilly Associates. " –

8

Вы считаете JBE (Java Bytecode Editor)?
Он основан на Bytecode Engineering Library Апача (BCEL)

+0

опечатка: это BCEL. В противном случае отличный редактор –

7

Может быть, эта статья может вам начать работу: Bytecode basics (немного старый, но вы получите идею).

class file format пригодится тоже: D

+0

+1 для редактирования – Pops

7

Байт-код записывается как фактические байты, которые обычно не могут быть легко редактированы обычным текстовым редактором.

Это означает, что вам понадобится то, что преобразует текстовое представление в двоичное. Разумным местом для начала будет ассемблер, такой как Jasmin.

8

Я создал новый Java bytecode assembler, который обратно совместим с Jasmin, но также добавляет много новых функций и немного упрощает синтаксис.

Вот пример того, как вы можете написать программу 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. В настоящее время он охватывает только Hello, World, но я могу продолжить его, если есть интерес.

+1

ссылка не работает – Manza

+0

Извините. Похоже, что вся вики исчезла. Я отправлю их по электронной почте, чтобы узнать, могут ли они вернуть их или иметь какие-либо копии. – Antimony

Смежные вопросы