Important note
Due to the limited amount of available time on
the part of the Diablo team, FIT is no longer actively developed or
supported. The FIT mailing list has been closed down, and any but the
most trivial support requests will no longer be handled. We are very
sorry about this, but we simply do not have the resources to develop
and maintain FIT in an adequate way. This web site will remain online
and the code will remain available for all interested parties. The
Diablo project itself is
still actively maintained though.
FIT is an ATOM-like tool for the generation of binary instrumentors. It
allows you to specify exactly what instrumentation you want to perform on
a program, and then generates a custom instrumentor that applies this
instrumentation to binaries.
If you want to know the details, read
the original FIT paper
(published at the PASTE '04 conference in Washington), available from the
ACM Digital Library:
The design and implementation of FIT: a flexible instrumentation toolkit.
Bruno De Bus, Dominique Chanet, Bjorn De Sutter, Ludo Van Put, Koen De Bosschere,
Proceedings of the ACM-SIGPLAN-SIGSOFT workshop on Program Analysis
for Software Tools and Engineering, pp 29-34, June 2004.
FIT is released under the GNU General Public License, so you are free to
use, modify and redistribute it, as long as you contribute your changes
back to the community. If you use FIT for any kind of research, we would
very much appreciate it if you cited the aforementioned paper in your publications
about that research.
FIT has some advantages over other binary instrumentation tools:
- it is cross-platform: currently there are implementations for i386-linux and
arm-linux. Implementations for arm-ads (this is the development environment supplied by
ARM Inc.) and the Digital/Compaq/HP Alpha architecture are under development.
- it is flexible: unlike for example pixie, FIT allows you to define your own
custom instrumentation routines, which can be called at instruction, basic block, function
or program level.
- it is (relatively) fast: because the instrumentors generated by FIT statically
rewrite your program, information gathering is faster than in the case of dynamic
instrumentors (like DIOTA) or simulators.
- it is precise: almost all instrumentation methods (apart from whole-system
simulation, which is very slow and tedious) have various subtle effects on the run-time
behaviour of the instrumented program. FIT tries to minimize these kinds of intrusions.
In fact, for the i386 port, these intrusions can be avoided altogether, resulting in an
instrumented program that is guaranteed to execute in exactly the same way as its
uninstrumented counterpart. The price for this however is a considerable increase in
execution time and the need to run a patched version of the Linux kernel.
Of course, FIT also has some disadvantages over other tools:
- because FIT produces static instrumentators, it does not support self-modifying
code. If you are interested in instrumenting self-modifying or dynamically generated code
(e.g. JITed Java code), take a look at the
DIOTA project.
- as FIT is based on the Diablo framework,
it acts as an instrumenting linker. This means that FIT will not work on an executable
file alone. It needs the original object files and libraries from which the executable was
generated. It will also only work on statically linked binaries.
- the Diablo framework also requires that you use a modified tool chain to generate the
executable you want to rewrite (instrument). The modifications required do not affect the
generated code, they only serve to pass some extra information down from the
compiler to Diablo. The necessary patches can be downloaded from the
Diablo web site, but we also offer some
precompiled tool chains for i386 and ARM.