Adaptable Binary Programs

Susan L. Graham, Steven Lucco, Robert Wahbe
Computer Science Division
571 Evans Hall
UC Berkeley
Berkeley  CA  94720


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

Download the full text of this paper in POSTSCRIPT (230,541 bytes) form.

To Become a USENIX Member, please see our Membership Information.