Sadza (oprogramowanie)

W statycznej analizie programu Soot jest platformą manipulacji i optymalizacji kodu bajtowego, składającą się z języków pośrednich dla Javy . Został opracowany przez Sable Research Group na Uniwersytecie McGill . Soot zapewnia cztery pośrednie reprezentacje do użytku za pośrednictwem swojego interfejsu API dla innych programów analitycznych, aby uzyskać dostęp i budować na nich:

Bieżąca wersja oprogramowania Soot zawiera również szczegółowe analizy programu , które mogą być używane od razu po wyjęciu z pudełka, takie jak kontekstowa, niewrażliwa na przepływ analiza punktów do , analiza wykresu wywołań i analiza dominacji (odpowiedź na pytanie „musi wystąpić zdarzenie następujące po zdarzenie b ?”). Posiada również dekompilator o nazwie dava.

Soot to darmowe oprogramowanie dostępne na licencji GNU Lesser General Public License (LGPL). W 2010 roku dwa artykuły naukowe na temat sadzy ( Vallée-Rai i in. 1999 i Pominville i in. 2000 ) zostały wybrane jako IBM CASCON First Decade High Impact Papers spośród 12 innych artykułów z 425 wpisów.

Jimple

Jimple jest pośrednią reprezentacją programu Java zaprojektowanego tak, aby był łatwiejszy do optymalizacji niż kod bajtowy Java . Jest typowany , ma konkretną składnię i jest oparty na trójadresowym kodzie .

Jimple obejmuje tylko 15 różnych operacji, co upraszcza analizę przepływu. Natomiast kod bajtowy Java obejmuje ponad 200 różnych operacji .

W przeciwieństwie do kodu bajtowego Java, w Jimple zmienne lokalne i stosowe są wpisywane, a Jimple jest z natury bezpieczny.

Konwersja do Jimple lub „Jimplifying” (po „uproszczeniu”) to konwersja kodu bajtowego na kod trójadresowy. Ideą konwersji, którą po raz pierwszy zbadał Clark Verbrugge, jest powiązanie zmiennej z każdą pozycją w stosie. Stąd operacje na stosie stają się przypisaniami obejmującymi zmienne stosu.

Przykład

Rozważ następujący kod bajtowy, który pochodzi z

iload 1 // ładuje zmienną x1 i umieszcza ją na stosie iload 2 // ładuje zmienną x2 i umieszcza na stosie iadd // pobiera dwie wartości i umieszcza ich sumę na stosie istore 1 // pobiera wartość z stos i przechowujemy go w zmiennej x1

Powyższe przekłada się na następujący trzyadresowy kod:

stos1 = x1 // iładuj 1 stos2 = x2 // iładuj 2 stos1 = stos1 + stos2 // iadd x1 = stos1 // przechowuj 1

Ogólnie wynikowy kod nie ma statycznego formularza pojedynczego przypisania .

Dalsza lektura

Linki zewnętrzne