Программирование в байт-коде 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

Рассматривали ли вы JBE (редактор байт-кода Java)?
Он основан на Библиотеке разработки байт-кода Apache ( BCEL)

Этот парень проведет вас шаг за шагом через процесс написания файла класса программы Hello World. Довольно интересные вещи:-) https://medium.com/@davethomas_9528/writing-hello-world-in-java-byte-code-34f75428e0ad

Другие вопросы по тегам