DynamoRIO's
API abstracts away the details of the virtualization process and focuses on monitoring or modifying the dynamic code stream of the program. A tool can insert
trampolines into the program that invoke tool actions at specific program points. A tool can also insert instrumentation at the
assembly language level, which provides fine-grained control over tool actions and tool performance. DynamoRIO supports
adaptive optimization and adaptive instrumentation by allowing a tool to remove or modify its instrumentation at any point throughout the execution of the target program. DynamoRIO invokes tool-registered
callbacks at a number of common program event points, such as thread creation, library loading, system calls, signals, or exceptions. Its API also allows inspecting the program's libraries and
address space in addition to its code. DynamoRIO's API and event callbacks are designed to be cross-platform, enabling the same tool code to operate on both Windows and Linux and on both IA-32 and x86-64. DynamoRIO ensures tool
transparency by isolating the tool's resources, such as its
stack, memory, and file accesses, from the program upon which the tool is operating. DynamoRIO contains libraries that extend its API to provide
symbol table access, function wrapping and replacing, and memory address tracing utilities. ==Tools==