2012 · 54 citations · 23 references
EngineeringComputer EngineeringComputer ScienceAlgorithmsComputer ArchitectureDesign AutomationCode GenerationInstruction Set ArchitectureLogic SynthesisMicroarchitecture DesignProcessor MicroarchitectureSymbolic ExecutionBinary AnalysisBit-vector ConstraintsBit-vector ReasoningSampling StrategiesSymbolic Execution Engines
Symbolic execution is a key component of precise binary program analysis tools. We discuss how to automatically boot-strap the construction of a symbolic execution engine for a processor instruction set such as x86, x64 or ARM. We show how to automatically synthesize symbolic representations of individual processor instructions from input/output examples and express them as bit-vector constraints. We present and compare various synthesis algorithms and instruction sampling strategies. We introduce a new synthesis algorithm based on smart sampling which we show is one to two orders of magnitude faster than previous synthesis algorithms in our context. With this new algorithm, we can automatically synthesize bit-vector circuits for over 500 x86 instructions (8/16/32-bits, outputs, EFLAGS) using only 6 synthesis templates and in less than two hours using the Z3 SMT solver on a regular machine. During this work, we also discovered several inconsistencies across x86 processors, errors in the x86 Intel spec, and several bugs in previous manually-written x86 instruction handlers.
23
Automated Whitebox Fuzz Testing.
Patrice Godefroid, Michael Y. Levin, David A. Molnar · 2008 · 1.1K citations
Combinatorial sketching for finite programs
Armando Solar-Lezama, Liviu Tancau, Rastislav Bodík et al. · 2006 · 642 citations
Oracle-guided component-based program synthesis
Susmit Jha, Sumit Gulwani, Sanjit A. Seshia et al. · 2010 · 479 citations
Automating string processing in spreadsheets using input-output examples
Sumit Gulwani · 2011 · 446 citations