DynamoRIO
|
DynamoRIO is a runtime code manipulation system that supports code transformations on any part of a program, while it executes. DynamoRIO gives complete control over the runtime code stream and does not limit transformations to trampoline insertion. 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, Linux, or Android) and commodity IA-32, AMD64, ARM, and AArch64 hardware. See Platform Limitations for details of which platform combinations are fully supported.
This document describes the DynamoRIO system and the various APIs that it exports for building custom tools. It is divided into the following sections:
- Tutorials
Gives a few short tutorials on using DynamoRIO and includes slides from prior in-person tutorial presentations. - Sample Tools
Shows some sample use cases and reference implementations. - How to Build a Tool
How to build a tool or "client" of DynamoRIO. - How to Run
How to run DynamoRIO. - Tool Event Model and API
The top-level interfaces provided to a tool. - Code Manipulation API
DynamoRIO's full runtime code manipulation interface. - Extension API
DynamoRIO's API is augmented by a collection of extension libraries. - Disassembly Library
DynamoRIO can be used as a standalone library for IA-32/AMD64/ARM/AArch64 disassembly, decoding, encoding, and general instruction manipulation. A separate static library is provided for this purpose. - DynamoRIO System Overview
A description of the implementation of the DynamoRIO system. - Release Notes for Version 11.0.20042
Release notes for this release, including changes since prior releases and plans for future releases.