Анализ псевдонимов в Java - PullRequest
       10

Анализ псевдонимов в Java

17 голосов
/ 04 декабря 2011

Может кто-нибудь указать мне на структуру или реализацию анализа псевдонимов для Java.Я посмотрел на среду asm, но она предоставляет только анализ потока данных и анализ потока управления.

Обновление : просто любопытно, но кто-нибудь знает, если Findbugs выполняет анализ псевдонимов?

Ответы [ 5 ]

12 голосов
/ 03 января 2012

Мне известны три платформы анализа программ с открытым исходным кодом с анализом псевдонимов для Java:

  1. WALA (отказ от ответственности: я сопровождающий WALA).
  2. Сажа
  3. Аккорд

Обратите внимание, что на самом деле в этих платформах реализовано баллов-анализу , с помощью которого можно определить возможный псевдоним.Некоторые подробности анализа указателей WALA доступны по адресу http://wala.sourceforge.net/wiki/index.php/UserGuide:PointerAnalysis.

7 голосов
/ 21 февраля 2016

Я думаю, что это довольно важный вопрос, так как анализ точек / анализ псевдонимов является фундаментальной частью большинства задач анализа программ.Итак, вот моя попытка более полного списка фреймворков для Java.Некоторые из них более полны, чем другие, и это активная область исследований, поэтому я, возможно, пропустил несколько.Трудно сказать, какая реализация является лучшей, но DOOP и SPARK кажутся популярным выбором среди ученых.

  1. Сажа (SPARK)
    • Выпущено до PADDLE,но все еще активно используется сообществом Сажи.SPARK полностью интегрирован в Soot и хорошо работает для нечувствительного к контексту анализа.
    • Документы: [1]
    • Ресурсы: [1] , [2]
  2. Сажа (PADDLE)
    • Выпущено в 2005-2008 годах.Сажа включает интерфейс frontend для PADDLE, но не backend .Проект больше не поддерживается (я не смог запустить его с последними выпусками Soot).Поддерживается представление набора на основе BDD и множественные абстракции чувствительности к контексту для анализа в Soot.
    • Документы: [1] , [2] , [3] , [4]
    • Ресурсы: [1]
  3. bddbddb
    • Декларативная спецификация на основе данных, преобразующая анализ в эффективные операции на основе BDD.
    • Документы: [1] , [2]
    • Ресурсы: [1]
  4. CHORD
    • CHORD предлагает несколько стандартных вариантов анализа точек для контекстаи контекстно-нечувствительный анализ.
    • Ресурсы: [1] , [2]
  5. WALA
    • В WALA реализован алгоритм потока данных Межпроцедурной распределенной среды (IDE).
    • Документы: [1]
    • Ресурсы: [1] , [2]
  6. DOOP
    • Декларативная реализация на основе Datalog, выпущенная по лицензии MIT, но требующая проприетарной LogicBlox Datalog Framework.Я считаю, что этот проект в настоящее время претендует на то, чтобы быть самой быстрой и самой универсальной из доступных сред.Это также очень активный проект, который хорошо зарекомендовал себя в исследовательском сообществе.
    • Документы: [1] , [2] , [3] , [4] , [5]
    • Ресурсы: [1] , [2] , [3] , [4]
  7. Атлас (Point-to Toolbox)
    • Выпущен в 2016 году самостоятельно .Простой андерсеновский анализ указывает на Атлас .
    • Points-To Toolbox выпущен по лицензии MIT, но требует проприетарной инфраструктуры Atlas.
    • Ресурсы: [1]
  8. SCUBA
    • Решатель на основе ограничений для контекстно-зависимого анализа точек.
    • Документы: [1]

Дополнительные инструменты для работы со сторонними библиотеками.

  1. Averroes
    • Создает сводные данные Java-байт-кода сторонних библиотек.
    • Документы: [1] , [2]
    • Ресурсы: [1]
  2. Flow Miner
    • Генерирует XML-сводки потоков и свойств сторонних библиотек.
    • Документы: [1]
    • Ресурсы: [1]
1 голос
/ 04 декабря 2011

Одна возможность - Sawja , реализована в OCaml. Кажется, он пока не содержит анализа псевдонимов, но предлагает строительные блоки для его создания.

Что касается вашего обновления, Google Билл Пью говорит, что Findbugs ищет определенные шаблоны в коде без разрешения указателей. Конечно, это было в 2006 году, так что кто знает, что произошло с тех пор ... Время летит быстро.

1 голос
/ 04 декабря 2011

Есть doop , который я видел на OOPSLA, но я не знаю, в каком он состоянии.

Я не знаю других реализаций, только тонна бумаг.

0 голосов
/ 04 декабря 2011

Наш набор инструментов для реинжиниринга программного обеспечения DMS и его интерфейс Java могут быть использованы для его создания.

DMS обеспечивает синтаксический анализ общего назначения, построение таблицы дерева / символови возможности анализа потока (поток управления, поток данных, точка-точка, граф вызовов, ...).Подключив передний конец к этому механизму, можно выполнить анализ, специфичный для языка, без необходимости создавать большую часть оборудования с нуля.Они использовались для глобального анализа точек и построения графа в очень больших C-приложениях, а также для анализа потока управления на C ++.

Для Java у нас реализован поток локального управления методом и некоторые аспекты локального потока данных.Чтобы провести хороший анализ псевдонимов, вам необходимо заполнить граф вызовов.

...