Symbolic execution with SymCC: Don't interpret, compile
s3.eurecom.fr
s3.eurecom.fr
However... it’s slow as hell, and I was wondering if I could implement some kind of bytecode compiler to cache results. It looks like this does exactly that, by tagging cells as symbolic or constant, and replacing them on the fly. Hmmm.
Great
But i dont see any algorithmic improvement on the exponential explosion of states?
Is this "outsourced" to a fuzzer that has to generate coverage test cases ?
To me, it was also not clear initially why symbolic execution is useful anyway. But this is for testing. The paper introduction explains it. "Symbolic execution was conceived more than 40 years ago to aid in software testing." The goal is to cover all possible execution paths in all possible conditions, which is hard or impossible with traditional testing.
The new approach here (SymCC) improves a lot on the runtime of the symbolic execution over previous approaches.
Also, for minimal log/trace placement it's actually fun to use.
Even smarter fuzzing tools like AFL which use branches taken as feedback to the fuzzer are randomized.