Symbolisk utförande är en viktig komponent i exakta binära program analysverktyg. Vi diskuterar hur man automatiskt boot-strap konstruktionen av en symbolisk exekvering motor för en processor instruktion set som x86, x64 eller ARM. Vi visar hur man automatiskt syntetiserar symboliska representationer av enskilda processor instruktioner från input / output exempel och uttrycka dem som bit-vektor begränsningar. Vi presenterar och jämför olika syntesalgoritmer och instruktioner provtagningsstrategier. Vi introducerar en ny syntesalgoritm baserad på smart provtagning som vi visar är en till två storleksordningar snabbare än tidigare syntesalgoritmer i vårt sammanhang. Med denna nya algoritm kan vi automatiskt syntetisera bit-vektorkretsar för över 500 x86 instruktioner (8/16/32-bitar, utgångar, EFLAGS) med endast 6 syntesmallar och på mindre än två timmar med hjälp av Z3 SMT-lösaren på en vanlig maskin. Under detta arbete upptäckte vi också flera inkonsekvenser mellan x86 processorer, fel i x86 Intel spec, och flera fel i tidigare manuellt skrivna x86 instruktionshanterare.
Godefroid och Taly REF föreslår en syntesalgoritm som effektivt kan producera bit-vektorkretsar för processorinstruktioner, baserat på smart provtagning.
Automated synthesis of symbolic instruction encodings from I/O samples
{'venue': "PLDI '12", 'journal': None, 'mag_field_of_study': ['Computer Science']}