Can You Recover Source Code from an Executable?: The Science, Algorithms, and Limits of Decompilation