Blandad betong och symbolisk körning är en viktig teknik för att hitta och förstå mjukvarubuggar, inklusive säkerhetsrelevanta sådana. Befintliga symboliska utförandetekniker är dock begränsade till att undersöka en genomförandeväg i taget, där symboliska variabler endast återspeglar direkta databeroenden. Vi introducerar loop-extended symbolisk avrättning, en generalisering som breddar täckningen av symboliska resultat i program med loopar. Det introducerar symboliska variabler för antalet gånger varje loop körs, och länkar dessa med funktioner i en känd ingång grammatik såsom variabel längd eller upprepa fält. Detta möjliggör symboliska begränsningar för att täcka en klass av banor som inkluderar olika antal loop iterationer, uttrycker loop-beroende programvärden i termer av egenskaper hos inmatningen. Genom att utföra mer resonemang symboliskt, i stället för genom oriktad utforskning, tillämpningar av loop-extended symboliskt utförande kan uppnå bättre resultat och / eller kräver färre program exekveringar. För att demonstrera vår teknik, tillämpar vi den på problemet med att upptäcka och diagnostisera buffert-överflöde sårbarheter i programvara som endast ges i binär form. Vårt verktyg finner sårbarheter i både en standardriktmärkessvit och 3 verkliga applikationer, efter att ha genererat bara en handfull kandidatingångar, och även diagnostiserar allmänna sårbarhetsförhållanden.
Loop-extended symboliska utförande försök att sammanfatta flera loop iterationer, så att ett litet antal symboliska avrättningar av en loop kropp kan fånga många möjliga orullningar av loop REF.
Loop-extended symbolic execution on binary programs
{'venue': 'ISSTA', 'journal': None, 'mag_field_of_study': ['Computer Science']}