This document discusses three emulation-based software protection techniques: emulation sandboxing, emulation-based encrypted code execution, and emulation-based page granularity code signing. Emulation sandboxing protects against kernel malware by executing guest OS instructions in a separate host OS memory space. Encrypted code execution protects against reverse code engineering by decrypting and executing encrypted guest code in host memory. Page granularity code signing protects against software exploits by only executing guest code with valid authentication codes computed in host memory.