Можно ли просмотреть байт-код файла класса?
Возможный дубликат:
Существует ли редактор классов Java / байт-кода для редактирования инструкций?
Исходный код Java скомпилирован в байт-код, который фактически находится в файле класса. Можно ли просмотреть байт-код скомпилированного класса?
Если это возможно, можно ли это отредактировать?
Есть ли плагин Eclipse для этого?
5 ответов
JDK поставляется с javap, который является инструментом для дизассемблирования байт-кода внутри файла класса. Возможно редактирование на уровне байтового кода. Взгляните на BCEL, библиотеку Java, предназначенную для чтения, манипулирования и записи файлов классов.
Список инструментов и библиотек для редактирования байт-кода можно найти в java-net. Например, JBE, редактор байт-кода Java, который даже поставляется с графическим интерфейсом.
Для просмотра байт-кодов
Забудьте о javap! Лучший плагин, который я когда-либо использовал, это "ASM - Плагин Bytecode Outline для Eclipse"
http://asm.ow2.org/eclipse/index.html
Это из ASM (фреймворк манипулирования байт-кодом).
Он показывает байт-коды (которые вы запрашивали), элементы стека (стиль jvm) и как генерировать тот же результат (для получения одинаковых байт-кодов) с использованием методов платформы asm.
Еще лучше тот факт, что он делает это, пока у вас выбран исходный код. Вам не нужно находить файл.class в каталоге bin, чтобы проверить его байт-код.
Редактировать их
Используя код:
- ASM: Посетители, очень, очень быстро.
- BCEL: загружает байт-код в виде описания файла класса в памяти.
- Javassit: самый простой в использовании, позволяет выполнять сопоставление с образцом и замену выражений.
От руки: JBE
По моему опыту, jclasslib является одним из лучших зрителей байт-кода.
Что касается редакторов, существует два типа: библиотеки манипулирования байт-кодом и редакторы с графическим интерфейсом. Этот вопрос был задан несколько раз на SO, вы можете проверить ответы и ссылки, которые были предоставлены.
Только будьте осторожны, что редактирование байт-кода не так просто, как вы думаете. JVMS накладывает много ограничений на то, какими должны быть файлы классов, и есть большая вероятность того, что один из ваших изменений нарушит один из них.
Проверьте эти другие вопросы:
Редактирование файла.class напрямую, игра с кодами операций
Попробуйте использовать - dirtyJOE - Java Total Editor - сложный редактор и средство просмотра для скомпилированных двоичных файлов Java (файлы.class).