Я ищу для написания короткой программы (возможно, Hello World) в байт-коде Java. Я просто хочу написать байт-код с помощью текстового редактора и запустить его. Как мне это сделать? Есть пример? Благодаря!Программирование на Java bytecode
ответ
Вы можете попробовать 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 ». Не могли бы вы пояснить, как вы имели в виду это заявление?
Это сообщение заставляет меня хотеть подделать работу, которую я делаю сегодня, и возиться с Джасмином. :-) – corsiKa
+1 Ясмин пришел в голову, и я не мог вспомнить имя. Это было описано в книге, в которой объясняются внутренние элементы JVM. Я также забыл название книги * sigh * ... – bakkal
@Bakkal: Согласно ссылке: «Jasmin был первоначально создан как компаньон к книге« Виртуальная машина Java », написанной Джоном Майером и Трой Даунинг и опубликованной O'Reilly Associates. " –
Может быть, эта статья может вам начать работу: Bytecode basics (немного старый, но вы получите идею).
class file format пригодится тоже: D
+1 для редактирования – Pops
Байт-код записывается как фактические байты, которые обычно не могут быть легко редактированы обычным текстовым редактором.
Это означает, что вам понадобится то, что преобразует текстовое представление в двоичное. Разумным местом для начала будет ассемблер, такой как Jasmin.
Я создал новый 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. Получить Java Bytecode на Android
- 2. Запуск Java bytecode
- 3. Компиляция Java Bytecode
- 4. Оптимизация компилятора: Java bytecode
- 5. Trace java bytecode stream
- 6. Библиотеки манипуляции Java Bytecode
- 7. Java Bytecode Signatures
- 8. refractoring java bytecode
- 9. throws vs Java Bytecode
- 10. Java Bytecode DUP
- 11. Java Bytecode Injection
- 12. java bytecode editor?
- 13. java bytecode - no ipush инструкция
- 14. Java Bytecode Manipulation Library Предложения
- 15. Абстрактная машина для Java bytecode
- 16. Java bytecode компилятор в JavaScript
- 17. Java: новый экземпляр from bytecode
- 18. Java bytecode: типы локальных переменных?
- 19. Java bytecode, java Поставщик и invokedynamic аргумент
- 20. Java Bytecode Manipulation и API отражения Java?
- 21. Программирование на Java - синтаксис
- 22. 3D-программирование на Java
- 23. Игровое программирование на Java?
- 24. Параллельное программирование на Java
- 25. Параллельное программирование на Java
- 26. Java-программирование: динамическое программирование на лестнице Пример
- 27. Оптимизация Java: только bytecode vs JIT
- 28. Переименование класса Java в представлении Bytecode
- 29. Можно ли просмотреть файлы классов Java bytecode
- 30. Java 8 lambda expression bytecode consistency
Прочтите https://docs.oracle.com/javase/specs/jvms/se7/html/index.html и используйте 'printf' в bash :-) –