Opal - это расширяемая библиотека для анализа и инженерии Java Bytecode. Opal полностью написан в Scala и использует расширенные языковые функции Scala, чтобы обеспечить новый и ранее невидимый уровень гибкости и простоты использования. Опал был разработан с нуля с расширяемостью , адаптивностью и масштабируемостью (с точки зрения памяти и производительности). Многие части опала либо уже параллелизированы, обеспечивают необходимую инфраструктуру для реализации высококвалифицированных анализов, либо, по крайней мере, защищены.
Опал состоит из нескольких проектов:
Common (Opal/Common): содержит общие полезные функции, структуры данных (например, тримапы) и алгоритмы графика (например, вычисление тесно связанных компонентов, информация о вычислении доминатора и т. Д.) Полезно при анализе (байтового) кода.
Инфраструктура статического анализа (OPAL/SI): содержит общую основу для решетки для реализации модульных статических анализов.
Инфраструктура байт -кодов (Opal/Bi): необходимая инфраструктура для анализа Java 1.0 - Java 16 Bytecode.
BYTECODE DISASSSEMBLER (OPAL/DA): Java Bytecode Disassassembler, который предоставляет представление файла класса один на один и который может использоваться для создания читаемых HTML-представлений файлов класса Java.
Создатель Bytecode (Opal/BC): самая основная инфраструктура для инженера Java Bytecode.
Представление Bytecode (Opal/Br): базовое представление опала Java Bytecode. Реализует все функциональные возможности для проведения основных анализов файлов класса Java.
Абстрактная структура интерпретации (OPAL/AI): реализация абстрактной структуры, основанной на интерпретации, которая может использоваться для легкого реализации анализа на разных уровнях точности.
Три адресного кода (Opal/TAC): предоставляет два промежуточного представления на основе 3-адреса на основе кода. Наивный, который напрямую создается на основе байт-кода, и более высокого уровня SSA-репрезентации, которое напрямую предоставляет CFG, а также информацию о DEF-USE с использованием результатов основной абстрактной интерпретации.
Экстракция зависимостей (Opal/DE): обеспечивает поддержку для извлечения и анализа зависимостей исходного кода проекта. Этот проект является основой для проектов, например, проверки архитектур.
Проверка архитектуры (Opal/AV): небольшая структура для проверки реализованной архитектуры проекта против указанной.
Framework (Opal/Framework): в основном просто агрегирует все подпроекты, чтобы можно было легко получить постоянный снимок всех подпроектов. В целом, рекомендуется объявить зависимость от этого проекта, когда вы хотите использовать Opal.
Демо, (Opal/Demos): содержит образцы рабочего кода, которые демонстрируют, как использовать Opal. Код в демонстрационном проекте в первую очередь предназначен как учебный ресурс. Чтобы запустить примеры, запустите консоль sbt (инструменты сборки Scala) и измените текущий проект на «демонстрации» ( project Demos ). После этого вы можете run несколько небольших демонстрационных анализов.
Hermes (Opal/Tools/Hermes): основа для запуска различных запросов кода против наборов проектов.
Bugpicker (Opal/Tools/BP): инструмент для поиска проблем Control-/Data-Flow, зависимых от исходного кода. Вид проблем, которые определяются, варьируются от бесполезных защитных проверок до ошибок, которые приводят к (безздоровым) исключениям во время выполнения.
Opal также поставляется с растущим числом инструментов, которые предназначены для того, чтобы помочь разработчикам ознакомиться с Java Bytecode и/или Opal. Эти проекты встречаются в папке DEVELOPING_OPAL/tools и могут быть запущены с помощью консоли SBT.
Следующее относится к филиалу «Мастер/развитие».
Opal использует SBT в качестве инструмента для сборки, а работа с Opal особенно легко с использованием консоли SBT. Убедитесь, что у вас установлен Java 8, по крайней мере, обновление 171, Scala 2.12.13 и SBT 1.4.6 и запуск, и что SBT может использовать не менее 4 ГБ оперативной памяти (-xmx4g). Загрузите недавний снимок опала или клона репозитория. Перейдите в корневую папку Опала.
sbt cleanBuild . Это компилирует все основные проекты (включая тесты), генерирует документацию по всему проекту Scaladoc и публикует проект в вашем локальном каталоге плюща.local.sbt и укажите два свойства системы ( JAVA_OPTS ): -Dorg.opalj.threads.CPUBoundTasks=8 -Dorg.opalj.threads.IOBoundTasks=24 - Установите значения для соответствующих значений для вашей машины ( CPUBoundTasks === "Number of real CPUs (Cores)" IOBoundTasks === "Number of (hyperthreaded) cores * 1 .5" ). Вы также можете установить эти свойства при использовании SBT путем ввода:eval sys.props("org.opalj.threads.CPUBoundTasks") = "1" .sbt test , чтобы запустить модульные тесты и проверить, что все работает как ожидалось. Обратите внимание, что некоторые тесты генерируют некоторые дополнительные (цветные) выходные данные. Однако, пока все тесты преуспевают без ошибок, все в порядке. Если sbt test не удается, это может быть связано с недостаточной памятью. В этом случае необходимо запустить SBT с большей памятью.sbt it:test для запуска комплекса интеграционных тестов. Выполнение этого тестового набора может занять очень долго (на быстром рабочем столе с 32 ГБ и 8 ядрами, который занимает ~ 2 часа).Вы готовы к работе.
Поиск неисправностей
Когда вы сталкиваетесь с проблемами при строительстве опала, пожалуйста, рассмотрите следующие варианты.
Чтобы начать, перейдите на веб -страницу проекта. Кроме того, код в проекте Demos содержит много коротких (ER) примеров, которые демонстрируют, как решать обычные повторяющиеся задачи. Большинство примеров могут быть непосредственно выполнены.
Начните консоли SBT. (В вызове корневой папки Opal sbt в командной строке.) Измените проект на демонстрации, используя project Demos и введите run для запуска одной из демонстраций.