DynamoRIO
Build Your Own Tool

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 10.93.20012
    Release notes for this release, including changes since prior releases and plans for future releases.