|
![]() |
![]() |
(c) Copyright 2002-2005 HEWLETT-PACKARD COMPANY
(c) Copyright 2002-2005 Massachusetts Institute of Technology
The primary reference for DynamoRIO is Derek Bruening's PhD thesis. The rest of this page contains a brief introduction to the system.
DynamoRIO is a runtime code manipulation system that supports code transformations on any part of a program, while it executes. DynamoRIO exports an interface for building dynamic tools for a wide variety of uses: program analysis and understanding, profiling, instrumentation, optimization, translation, etc. DynamoRIO provides efficient, transparent, and comprehensive manipulation of an unmodified application running on a stock operating system (Windows or Linux) and commodity IA-32 hardware.
DynamoRIO operates by shifting an application's execution from its original
instructions to a code cache, where the instructions can be freely
modified. DynamoRIO occupies the address space with the application and
has full control over execution, taking over whenever control leaves the
code cache. The flow of control between the components of DynamoRIO and
its code cache (actually, two code caches) looks like this:
DynamoRIO copies the application code one basic block at a time into its basic block code cache. A block that directly targets another block already resident in the cache is linked to that block to avoid the cost of returning to the DynamoRIO dispatcher.
Frequently executed sequences of basic blocks are combined into traces, which are placed in a separate code cache. DynamoRIO makes these traces available via its interface for convenient access to hot application code streams.
For further discussion of the internals of DynamoRIO, see the RIO group's publications.
|