Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

  • WALA (отказ от ответственности: я поддерживаю WALA).
  • Soot
  • Chord

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

Ответ 2

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

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

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

Наш DMS Software Reengineering Toolkit и его Java Front End может быть использован для его создания.

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

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