Күй (бағдарламалық жасақтама) - Soot (software)

Жылы статикалық бағдарламалық талдау, Күйе құрамына кіретін байт-кодты манипуляциялау және оңтайландыру шеңбері болып табылады аралық тілдер үшін Java. Оны әзірледі Sable зерттеу тобы кезінде McGill университеті. Күй төртеуді ұсынады аралық өкілдіктер оны пайдалану үшін API қол жетімді және мыналарға негізделген басқа талдау бағдарламалары үшін:[1]

Soot бағдарламалық жасақтамасының қазіргі шығарылымында егжей-тегжейлі мәліметтер бар бағдарламалық талдаулар сияқты қораптан тыс пайдалануға болады контекстке сезімтал ағынға сезімтал емес нүктелік талдау,[2] шақыру графигі талдау және үстемдік талдау (сұраққа жауап беру »міндетті түрде болуы керек а оқиғаны қадағалау бОның «dava» деп аталатын декомпиляторы бар.

Күй ақысыз бағдарламалық жасақтама астында қол жетімді GNU кіші жалпыға ортақ лицензиясы (LGPL). 2010 жылы Soot туралы екі ғылыми жұмыс (Валле-Рай және басқалар. 1999 ж және Поминвилл және басқалар. 2000 ) IBM ретінде таңдалды CASCON Бірінші онжылдыққа әсері жоғары құжаттар 425 жазбадан 12 басқа құжаттардың қатарында.[3]

Джимпл

Джимпл - бұл аралық өкілдік а Java қарағанда оңтайландыру үшін жеңілдетілген бағдарлама Java байт коды. Бұл терілген, нақты синтаксиске ие және негізделген үш мекенжай коды.

Джимплге тек 15 түрлі операциялар кіреді, осылайша ағынды талдау жеңілдейді. Керісінше, Java байт коды кіреді 200-ден астам түрлі операциялар.[4][5]

Java байт-кодынан айырмашылығы, Jimple-де жергілікті және стек айнымалылары теріледі, ал Jimple табиғатынан қауіпсіз болып табылады.

Джимплге немесе «жеңілдетуге» айналдыру («жеңілдетуден» кейін) - бұл байт кодын үш адрестік кодқа айналдыру. Алдымен Кларк Вербрюгг зерттеген конверсияның мақсаты - стектің әр позициясына айнымалыны байланыстыру. Демек, стек операциялары стек айнымалыларын қамтитын тапсырмаларға айналады.

Мысал

Келесі байт кодын қарастырайық, ол [6]

iload 1 // x1 айнымалысын жүктеп, оны stackiload 2-ге итермелеңіз // x2 айнымалысын жүктеп, оны stackiadd // pop екі мәніне итеріп, олардың қосындысын стекстер 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 / күйе Wiki · GitHub». Sable.mcgill.ca. 2016-01-12. Алынған 2016-08-10.
  3. ^ «CASCON бірінші онкүндіктегі әсері жоғары құжаттар». Dl.acm.org. Алынған 2016-08-10.
  4. ^ Валле-Рай, Раджа (1998). «Джимпл шеңбері». Sable.mcgill.ca.CS1 maint: ref = harv (сілтеме)
  5. ^ Валле-Рай, Раджа; Хендрен, Лори Дж. (1998). «Джимпл: талдау мен түрлендіруге арналған Java байт кодын жеңілдету». Sable.mcgill.ca.CS1 maint: ref = harv (сілтеме)
  6. ^ Vallee-Rai 1998 ж.

Әрі қарай оқу

Сыртқы сілтемелер