We propose to develop a trace-based disassembler and integrate it with our break-through binary analysis tool, CodeSurfer®/x86. A trace-based disassembler builds a trace of the instruction sequence that is executed at run time (during one or more runs of the program). The trace is analyzed to construct control-flow graphs for each of the procedures, which are then used to generate an assembly listing. This approach will make CodeSurfer/x86 applicable to binaries that employ anti-tamper techniques known as control-flow obfuscations. In particular, we will focus on the potential to unravel self-modifying code. CodeSurfer/x86 will also be used to drive a static disassembler to help "flesh out" the program listing generated by the trace-based disassembler.