Сажа (программное обеспечение) - Soot (software)
Эта статья включает в себя список общих Рекомендации, но он остается в основном непроверенным, потому что ему не хватает соответствующих встроенные цитаты.Октябрь 2009 г.) (Узнайте, как и когда удалить этот шаблон сообщения) ( |
В статический анализ программы, Сажа это фреймворк для обработки и оптимизации байт-кода, состоящий из промежуточные языки за Ява. Он был разработан Исследовательская группа соболя в Университет Макгилла. Сажа обеспечивает четыре промежуточные представления для использования через 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
В общем, полученный код не имеет статическая форма единого назначения.
Рекомендации
- ^ «Фреймворк для анализа и преобразования приложений Java и Android». Sable.mcgill.ca. Получено 2016-08-10.
- ^ "Учебники · Sable / soot Wiki · GitHub". Sable.mcgill.ca. 2016-01-12. Получено 2016-08-10.
- ^ "Важные документы CASCON за первое десятилетие". Dl.acm.org. Получено 2016-08-10.
- ^ Валле-Рай, Раджа (1998). «Фреймворк Jimple». Sable.mcgill.ca.CS1 maint: ref = harv (ссылка на сайт)
- ^ Валле-Рай, Раджа; Хендрен, Лори Дж. (1998). "Jimple: упрощение байт-кода Java для анализа и преобразований". Sable.mcgill.ca.CS1 maint: ref = harv (ссылка на сайт)
- ^ Валле-Рай 1998.
дальнейшее чтение
- Валле-Рай, Раджа; Co, Phong; Ганьон, Этьен; Хендрен, Лори; Лам, Патрик; Сундаресан, Виджай (1998). "Сажа: среда оптимизации байт-кода Java". Материалы конференции 1999 г. Центра перспективных исследований по совместным исследованиям. КАСКОН '99.CS1 maint: ref = harv (ссылка на сайт) Переиздано в Высококачественные доклады CASCON за первое десятилетие. КАСКОН '10. С. 214–224. Дои:10.1145/1925805.1925818.
- Поминвиль, Патрис; Цянь, Фэн; Валле-Рай, Раджа; Хендрен, Лори; Вербрюгге, Кларк (2000). Фреймворк для оптимизации Java с использованием атрибутов.CS1 maint: ref = harv (ссылка на сайт) Переиздано в Высококачественные доклады CASCON за первое десятилетие. КАСКОН '10. С. 225–241. Дои:10.1145/1925805.1925819.
- Лам, Патрик; Бодден, Эрик; Лхотак, Ондржей; Хендрен, Лори (2011). «Фреймворк Soot для анализа программ Java: ретроспектива» (PDF). Семинар по пользователям Cetus и инфраструктуре компиляторов.CS1 maint: ref = harv (ссылка на сайт)