Adaptable Binary Programs Susan L. Graham, Steven Lucco, Robert Wahbe Computer Science Division 571 Evans Hall UC Berkeley Berkeley CA 94720 ABSTRACT To accurately and comprehensively monitor a program's behavior, many performance measurement tools transform the program's executable representation or binary. By instrumenting binary programs to monitor program events, tools can precisely analyze compiler optimization effectiveness, memory system performance, pipeline interlocking, and other dynamic program characteristics that are fully exposed only at this level. Binary transformation has also been used to support software-enforced fault isolation, debugging, machine re-targeting, and machine-dependent optimization. At present, binary transformation applications face a difficult trade-off. Previous approaches to implementing robust transformations result in significant disk space and run-time overhead. To improve efficiency, some current systems sacrifice robustness, relying on heuristic assumptions about the program and recognition of compiler-dependent code generation idioms. In this paper we begin by investigating the run-time and disk space overhead of transformation strategies that do not require assumptions about the program's control flow or register usage. We then detail simple information about the binary program that can significantly reduce this overhead. For each type of information, we show how it enables a corresponding type of binary transformation. We call binary programs that contain such enabling information adaptable binaries. Because adaptable binary information is simple, any compiler can generate it. Despite its simplicity, adaptable binary information has the necessary and sufficient expressive power to support a rich set of binary transformations.
To Become a USENIX Member, please see our Membership Information.