BCEL (Byte Code Engineering Library)

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 14:17, 31 октября 2016.
Jakarta BCEL
Разработчики: Apache Software Foundation
Постоянный выпуск: 5.2 / Шаблон:Release date
Написана на: Java
Операционная система: Cross-platform
Тип ПО: Bytecode Engineering Library
Лицензия: Apache License 2.0
Веб-сайт http://commons.apache.org/bcel/

BCEL (англ. Byte Code Engineering Library — «Техническая библиотека байт-кода») — замороженный[1] проект Apache Foundation, безвозмездно переданный 27 октября 2001 года Jakarta foundation. Изначально разработан Маркусом Дамом (англ. Marcus Dahm). BCEL представляет собой API для декомпиляции, изменения и повторной компиляции файлов класса Java, состоящих из байт-кодов. Как следствие, Java-ориентирован и не поддерживает байт-коды .NET, Python и т. д.[2]

Apache Software Foundation

Apache Software Foundation (сокр. ASF) — международное сообщество-фонд, способствующее развитию проектов программного обеспечения Apache. Было сформировано в июне 1999 года из Apache Group в Делавэре, США.[3] Зарождение фонда связано с разработкой группой Apache Group веб-сервера Apache в 1995 году. Сам фонд официально основан 25 марта 1999 года.[4]

Разработчики сообщества — энтузиасты со всего мира. Участвуют в различных Open Source проектах. Код пишется общими усилиями, что отличает ASF от других организаций. Есть собственная удобная лицензия — Apache Software License.

Существование такой лицензии обусловлено одной из задач компании: юридической защиты её участников и самой марки «Apache». Сама лицензия может применяться и для других проектов.

Чтобы попасть в ASF, надо внести значительный вклад в разработку или развитие проектов. Каждым из них руководит, в свою очередь, команда избранных экспертов. Как новичков поощряют вступлением в фонд за активное написание кода, так и означенные эксперты вовсю принимают участие в разработке. У фонда есть ряд спонсоров. Среди платиновых (более 100 000 $/год) такие компании, как Google, Yahoo! и с 2008 года Microsoft.

Jakarta Project

Проект Jakarta — один из списанных (по состоянию на 21 декабря 2011 года[5]) проектов фонда Apache Software Foundation. Был списан, так как никаких подпроектов не осталось. Основанный в 1999 году, проект владел набором разнообразных популярных решений с открытым кодом Java. С 2005 года ведётся переход подпроектов на верхний уровень ASF. Некоторые покидали проект Jakarta, чтобы стать таковыми, некоторые присоединялись к другим проектам верхнего уровня (Commons), а часть изъяли из обращения. Таким образом, по прошествии шести лет проект Jakarta списали.[6]

Особенностью проекта было развитие и поддержание свободного распространяемого программного обеспечения, написанное на языке программирования Java.[7]

Описание BCEL

Byte Code Engineering Library (Apache Commons BCEL™) предназначен предоставлять пользователям удобный подход к анализу, созданию и управлению (двоичными) файлами классов Java (теми, что заканчиваются .class). Классы представлены объектами, которые содержат всю символьную информацию о данном классе: методы, поля и, в частности, инструкции байт-кода.

Такие объекты могут быть прочитаны из существующего файла, преобразованы программой (например, классом загрузчика во время выполнения) и снова записаны в файл. Ещё более интересное применение — создание классов с нуля во время выполнения. Byte Code Engineering Library (BCEL) также может быть полезна, если вы хотите узнать о виртуальной машине Java (JVM) и формате файлов Java .class.

BCEL содержит верификатор байт-кода под названием JustIce, который обычно даёт вам гораздо более полную информацию о том, что случилось с вашим кодом, чем стандартное сообщение виртуальной машины Java.

BCEL уже успешно используется в некоторых проектах, таких, как компиляторы, оптимизаторы, обфускаторы, генераторы кода и средства анализа. В последние несколько лет проектом почти не занимаются. Ему можно помочь, если заглянуть в ASM проект на ObjectWeb.[1]

Использование

BCEL разбирает Java-класс на объекты существующих в нём конструкций (в отличие от обычных дизассемблеров, которые просто генерируют ассемблерный код). Эти объекты могут изменять свои байт-коды, а также создавать новые (вставкой их в существующий код или с помощью генерации нового класса целиком). Библиотека BCEL используется для выполнения следующих функций приложений:

  • Компиляция, декомпиляция и обфускация байт-кодов;
  • Производительность и профилирование;
Например, в код могут быть введены специальные фрагменты, замеряющие производительность или получающие данные о работе части программы.
  • Внедрение новой семантики языка;
К примеру, элементы аспектно-ориентированного программирования в Java были введены путём пересборки классов с помощью BCEL.

Список источников