Сажа (программное обеспечение)
![]() | Эта статья включает список общих ссылок , но в ней отсутствуют достаточные соответствующие встроенные цитаты . ( Октябрь 2009 г. ) |
В статическом анализе программ Soot представляет собой среду обработки и оптимизации байт-кода, состоящую из промежуточных языков для Java . Он был разработан исследовательской группой Sable в Университете Макгилла . В настоящее время Soot поддерживается группой Secure Software Engineering Group в Падерборнском университете . [1] Soot предоставляет четыре промежуточных представления для использования через свой API , чтобы другие программы анализа могли получить доступ и использовать их: [2]
- Baf: представление, близкое к байт-коду .
- Jimple : упрощенная версия исходного кода Java, имеющая максимум три компонента на оператор.
- Shimple: SSA вариант Jimple в (похожий на GIMPLE ).
- Grimp: агрегированная версия Jimple, подходящая для декомпиляции и проверки кода.
Текущая версия программного обеспечения Soot также содержит подробный программный анализ , который можно использовать «из коробки», например, контекстно-зависимый , нечувствительный к потоку анализ точек , [3] анализ графа вызовов и анализ доминирования (ответ на вопрос «должно ли событие a следовать за событием b ?»). У него также есть декомпилятор под названием dava.
Soot — бесплатное программное обеспечение , доступное по лицензии GNU Lesser General Public License (LGPL). В 2010 году две исследовательские работы по саже ( Vallée-Rai et al. 1999 и Pominville et al. 2000 IBM CASCON ) были выбраны в качестве статей о высоком воздействии первого десятилетия среди 12 других статей из 425 записей. [4]
Полный
[ редактировать ]Jimple — это промежуточное представление программы Java , предназначенное для упрощения оптимизации по сравнению с байт-кодом Java . Он типизирован , имеет конкретный синтаксис и основан на трехадресном коде .
Jimple включает всего 15 различных операций, что упрощает анализ потока. Напротив, байт-код Java включает более 200 различных операций . [5] [6]
В отличие от байт-кода Java, в Jimple локальные и стековые переменные типизированы, и Jimple по своей сути является типобезопасным.
Преобразование в Jimple, или «Jimplifying» (после «упрощения») — это преобразование байт-кода в трехадресный код. Идея преобразования, впервые исследованная Кларком Вербрюгге, заключается в том, чтобы связать переменную с каждой позицией в стеке. Следовательно, операции со стеком становятся назначениями, включающими переменные стека.
Пример
[ редактировать ]Рассмотрим следующий байт-код, взятый из [7]
iload 1 // load variable x1, and push it on the stack iload 2 // load variable x2, and push it on the stack iadd // pop two values, and push their sum on the stack istore 1 // pop a value from the stack, and store it in variable x1
Вышеупомянутое преобразуется в следующий трехадресный код:
stack1 = x1 // iload 1 stack2 = x2 // iload 2 stack1 = stack1 + stack2 // iadd x1 = stack1 // istore 1
В общем, результирующий код не имеет статической формы единственного присваивания .
Соотап
[ редактировать ]На смену Soot теперь пришла платформа SootUp, разработанная группой Secure Software Engineering Group в Университете Падерборна . [8] SootUp — это полная переработка Soot с новым дизайном, в которой больше внимания уделяется статическому анализу программ, а не оптимизации байт-кода.
Ссылки
[ редактировать ]- ^ «Soot — среда оптимизации Java» . github.com . Проверено 16 января 2024 г.
- ^ «Среда для анализа и преобразования приложений Java и Android» . Sable.mcgill.ca . Архивировано из оригинала 28 декабря 2008 г. Проверено 10 августа 2016 г.
- ^ «Учебники · Sable/soot Wiki · GitHub» . Sable.mcgill.ca . 12 января 2016 г. Проверено 10 августа 2016 г.
- ^ «Важнейшие документы CASCON за первое десятилетие» . Dl.acm.org . Проверено 10 августа 2016 г.
- ^ Валле-Рай, Раджа (1998). «Структура Джимпла» . Sable.mcgill.ca .
- ^ Валле-Рай, Раджа; Хендрен, Лори Дж. (1998). «Jimple: упрощение байт-кода Java для анализа и преобразований» . Sable.mcgill.ca .
- ^ Валле-Рай 1998 .
- ^ «Новая версия Soot с полностью переработанной архитектурой» . github.com . Проверено 16 января 2024 г.
Дальнейшее чтение
[ редактировать ]- Валле-Рай, Раджа; Ко, Фонг; Ганьон, Этьен; Хендрен, Лори; Лам, Патрик; Сундаресан, Виджай (1998). «Soot: платформа оптимизации байт-кода Java» . Материалы конференции Центра перспективных исследований по совместным исследованиям 1999 года . КАСКОН '99. Переиздано в CASCON Высокоэффективные документы первого десятилетия . КАСКОН '10. стр. 214–224. дои : 10.1145/1925805.1925818 .
- Поминвилл, Патрик; Цянь, Фэн; Вэлли-Рай, Раджа; Хендрен, Лори; Вербрюгге, Кларк (2000). Фреймворк для оптимизации Java с использованием атрибутов . Переиздано в CASCON Высокоэффективные документы первого десятилетия . КАСКОН '10. стр. 225–241. дои : 10.1145/1925805.1925819 .
- Лам, Патрик; Бодден, Эрик; Лхотак, Ондржей; Хендрен, Лори (2011). «Среда Soot для анализа программ Java: ретроспектива» (PDF) . Семинар для пользователей Cetus и инфраструктуры компиляторов .