Как скомпилировать строку байт-кода Java? - PullRequest
2 голосов
/ 26 марта 2012

При поиске в Интернете легко найти способ распечатать байт-код Java:

http://www.ibm.com/developerworks/ibm/library/it-haggar_bytecode/

Что я не смог найти, так это наличие стандартного представления байт-кода Java в виде строки и наличие инструмента для компиляции строкового представления байт-кода Java в двоичный байт-код.

В .NET аналогичным инструментом является ilasm.exe. Есть ли что-то подобное для Java и является ли оно стандартным?

Ответы [ 5 ]

3 голосов
/ 26 марта 2012

Для этого есть инструменты, но они не являются частью стандарта.У вас есть два варианта:

  • Вы можете использовать Java (tm) Bytecode Assembler или Jasmin .Они принимают текстовый файл в качестве входных данных и компилируют его в файл класса.
  • Вы можете использовать такую ​​библиотеку, как ASM , для создания байт-кода с использованием кода Java.Это обычный подход, когда вы читаете существующий байт-код и хотите преобразовать его.
1 голос
/ 26 марта 2012

Если вы просто пытаетесь просмотреть байт-код файла .class, javap - ваш друг.

На самом деле не существует "стандартного" способа преобразования байт-кода Java в сборку.- поскольку это обычно делается только во время выполнения JIT - но gcj делает что-то в этом направлении.

1 голос
/ 26 марта 2012

Что я не смог найти, так это если стандартное представление байт-кода Java в виде строки ...

Там нет ни одного.

Однако существуют сторонние инструменты для создания файлов классов различными способами.Асемблеры байт-кода, такие как ASM или Jasmin, являются одним из подходов, а другой подход заключается в программной генерации байт-кодов с использованием чего-то вроде BCEL.

(Стандартной утилите javap можно сказать выводить отформатированные байт-коды, но формат нестандартизирован, и нет стандартной утилиты, которая идет в другом направлении.)

1 голос
/ 26 марта 2012

В прошлом я использовал Жасмин .

1 голос
/ 26 марта 2012

Взгляните, например, ASM или Jasmin ;это Java-ассемблеры байт-кода.

JDK не содержит ассемблер байт-кода в качестве одного из своих стандартных инструментов.

...