2013 · 31 citations · 23 references
ComputingComputer EngineeringComputer ScienceCompilersDesign AutomationProgramming LanguagesCode GenerationSpeculative ExecutionStatic Code AnalysisBinary AnalysisBinary DisassemblyContent ClassificationRewriting SystemsTransformations
Binary rewriting is the process of transforming executables by maintaining the original binary's functionality, while improving it in one or more metrics, such as energy use, memory use, security, or reliability. Although several technologies for rewriting binaries exist, static rewriting allows for arbitrarily complex transformations to be performed. Other technologies, such as dynamic or minimally-invasive rewriting, are limited in their transformation ability. We have designed the first static binary rewriter that guarantees 100% code coverage without the need for relocation or symbolic information. A key challenge in static rewriting is content classification (i.e. deciding what portion of the code segment is code versus data). Our contributions are (i) handling portions of the code segment with uncertain classification by using speculative disassembly in case it was code, and retaining the original binary in case it was data; (ii) drastically limiting the number of possible speculative sequences using a new technique called binary characterization; and (iii) avoiding the need for relocation or symbolic information by using call translation at usage points of code pointers (i.e. indirect control transfers), rather than changing addresses at address creation points. Extensive evaluation using stripped binaries for the entire SPEC 2006 benchmark suite (with over 1.9 million lines of code) demonstrates the robustness of the scheme.
23
Chi-Keung Luk, Robert Cohn, Robert Muth et al. · ACM SIGPLAN Notices · 2005 · 3.2K citations
Chi-Keung Luk, Robert Cohn, Robert Muth et al. · 2005 · 2.3K citations
Program Analysis and Specialization for the C Programming Language
Lars Ole Andersen, Peter Lee · 2005 · 920 citations