Программирование в байт-коде Java
Я ищу написать короткую программу (может быть, Hello World) на Java байт-код. Я просто хочу написать байт-код с помощью моего текстового редактора и запустить его. Как бы я это сделал? Есть пример? Спасибо!
6 ответов
Вы можете попробовать Жасмин!
.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 Привет, мир.
Обновить
Я вижу, что ваш вопрос упоминает "без использования Javac или Java". Не могли бы вы уточнить, как вы имели в виду это заявление?
Я создал новый ассемблер байт-кода Java, который обратно совместим с 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
Я также написал учебник по сборке байт-кода. В настоящее время он охватывает только Hello, World, но я могу продолжить, если есть интерес.
Байт-код записывается как фактические байты, которые обычно не легко редактируются обычным текстовым редактором.
Это означает, что вам понадобится что-то, что преобразует текстовое представление в двоичное. Разумным местом для начала будет ассемблер, как Жасмин.
Может быть, эта статья поможет вам начать: Основы байт-кода (немного устаревшие, но вы поймете идею).
Формат файла класса тоже пригодится:D
Этот парень проведет вас шаг за шагом через процесс написания файла класса программы Hello World. Довольно интересные вещи:-) https://medium.com/@davethomas_9528/writing-hello-world-in-java-byte-code-34f75428e0ad