The authors present a postcompiler program manipulation tool called Dyninst
, which provides a C++ class library for program instrumentation. Using thi
s library, it is possible to instrument and modify application programs dur
ing execution. A unique feature of this library is that it permits machine-
independent binary instrumentation programs to be written. The authors desc
ribe the interface that a tool sees when using this library. They also disc
uss three simple tools built using this interface: a utility to count the n
umber of times a function is called, a program to capture the output of an
already running program to a file, and an implementation of conditional bre
akpoints. For the conditional breakpoint example, the authors show that by
using their interface compared with gdb, they are able to execute a program
with conditional breakpoints up to 900 times faster.