Imitate is a portable low-overhead framework and associated tools which will allow the recording of executions of applications (both single- and multi-threaded) such that they can be deterministically replayed in the future. The purpose of such a framework is to allow for the recording of applications in production environments so that errors resulting from non-determinism due to data races, incorrect synchronisation, and other concurrency issues, can be reproduced and debugged. I created Imitate as part of my final year individual project at Imperial College London.
In addition to portability and debugging by replay, one of the other main goals is to allow the traces generated by the framework to be easily amenable to debugging by trace analysis as this can enable debugging to be automated. The framework can also have other uses, such as data recovery in the event of corruption and for attack analysis in the event of a security violation in the application being recorded. However, they were not of primary concern for the implementation provided.
Please refer to the dissertation report PDF document (dissertation.pdf
) for background, related work and technical documentation for Imitate.
- Install
libiberty
,libdwarf
,libelf
and development headers. - Adjust
DYNINST_ROOT
variable inscripts/dyninst_env
to match location of Dyninst (lib/dyninst-5.0.1
). This must be an absolute path. - Load environment variables by running
source scripts/dyninst_env
- Compile DynInst by running
./build build
in thelib/dyninst-5.0.1/core
directory - Apply patch supplied in
linux-2.6.20.3.patch
file to the Linux kernel source and compile and install kernel and development headers. - Boot into patched kernel.
- Load environment variables by running
source scripts/dyninst_env
as above - Go into the
module/
directory and compile and load kernel module by runningmake clean all
, and thensudo make install
- Compile the record and replay monitors by going into the
record/
andreplay/
directories respectively and runningmake clean all
- You should now be able to use the monitors to record and replay processes. See the output from the record and replay programs for usage information
The creation of Imitate would not have possible without the use of DynInst. This repository contains the unmodified distribution of DynInst 5.0.1 in the lib
folder for convenience. For copyright and licence information of DynInst please check the README
file within the distribution.
Imitate is release under the GPL v2 License