Сажа (программное обеспечение) - Soot (software)

В статический анализ программы, Сажа это фреймворк для обработки и оптимизации байт-кода, состоящий из промежуточные языки за Ява. Он был разработан Исследовательская группа соболя в Университет Макгилла. Сажа обеспечивает четыре промежуточные представления для использования через API для других программ анализа, чтобы получить доступ и использовать:[1]

  • Баф: рядом байт-код представление.
  • Джимпл: упрощенная версия исходного кода Java, которая имеет максимум три компонента за заявление.
  • Shimple: an SSA вариация Jimple (похожа на GIMPLE ).
  • Grimp: агрегированная версия Jimple, подходящая для декомпиляция и проверка кода.

Текущая версия программного обеспечения Soot также содержит подробные программный анализ которые можно использовать "из коробки", например контекстно-зависимый нечувствительный к потоку указывает на анализ,[2] график звонков анализ и господство анализ (отвечая на вопрос "обязательное событие а следить за событием б? "). В нем также есть декомпилятор под названием dava.

Сажа бесплатно программное обеспечение доступно под Стандартная общественная лицензия ограниченного применения GNU (LGPL) .В 2010 г. вышли две исследовательские работы по сажи (Валле-Рай и др. 1999 г. и Pominville et al. 2000 г. ) были выбраны как IBM КАСКОН Доклады первого десятилетия, имеющие большое значение среди 12 других статей из 425 работ.[3]

Jimple

Джимпл - это промежуточное представление из Ява программа разработана так, чтобы ее было проще оптимизировать, чем Байт-код Java. это напечатанный, имеет конкретный синтаксис и основан на трехадресный код.

Jimple включает всего 15 различных операций, что упрощает анализ потока. Напротив, байт-код Java включает более 200 различных операций.[4][5]

В отличие от байт-кода java, в Jimple локальные переменные и переменные стека являются типизированными, и Jimple по своей сути является типобезопасным.

Преобразование в Jimple или «упрощение» (после «упрощения») - это преобразование байт-кода в трехадресный код. Идея преобразования, впервые исследованная Кларком Вербрюгге, состоит в том, чтобы связать переменную с каждой позицией в стеке. Следовательно, операции со стеком становятся присваиваниями с участием переменных стека.

пример

Рассмотрим следующий байт-код, взятый из [6]

iload 1 // загружаем переменную x1 и помещаем ее в stackiload 2 // загружаем переменную x2 и помещаем ее в стекiadd // извлекаем два значения и помещаем их сумму в stackistore 1 // извлекаем значение из стека, и сохраните его в переменной x1

Приведенное выше переводится в следующий трехадресный код:

stack1 = x1 // iload 1stack2 = x2 // iload 2stack1 = stack1 + stack2 // iaddx1 = stack1 // istore 1

В общем, полученный код не имеет статическая форма единого назначения.

Рекомендации

  1. ^ «Фреймворк для анализа и преобразования приложений Java и Android». Sable.mcgill.ca. Получено 2016-08-10.
  2. ^ "Учебники · Sable / soot Wiki · GitHub". Sable.mcgill.ca. 2016-01-12. Получено 2016-08-10.
  3. ^ "Важные документы CASCON за первое десятилетие". Dl.acm.org. Получено 2016-08-10.
  4. ^ Валле-Рай, Раджа (1998). «Фреймворк Jimple». Sable.mcgill.ca.CS1 maint: ref = harv (ссылка на сайт)
  5. ^ Валле-Рай, Раджа; Хендрен, Лори Дж. (1998). "Jimple: упрощение байт-кода Java для анализа и преобразований". Sable.mcgill.ca.CS1 maint: ref = harv (ссылка на сайт)
  6. ^ Валле-Рай 1998.

дальнейшее чтение

внешняя ссылка