DynamoRIO is a runtime code manipulation system that supports code transformations on any part of a program, while it executes.
DynamoRIO is a runtime code manipulation system designed to enable dynamic instrumentation and code transformations on any part of a program while it executes. This powerful tool supports a wide range of use cases, including program analysis, profiling, optimization, and translation.
Key Features:
Dynamic Instrumentation: DynamoRIO allows for arbitrary modifications to application instructions in real-time, enabling advanced code transformations and analyses.
Multi-Architecture Support: It works across IA-32/AMD64, ARM, AArch64, and more, making it versatile for various hardware platforms.
Comprehensive Tool Ecosystem: DynamoRIO serves as the foundation for tools like Dr. Memory (memory debugging), drcov (code coverage), and Dr. Fuzz (dynamic fuzz testing).
README
DynamoRIO
About DynamoRIO
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. Unlike many dynamic tool systems, DynamoRIO
is not limited to insertion of callouts/trampolines and allows arbitrary
modifications to application instructions via a powerful IA-32/AMD64/ARM/AArch64
instruction manipulation library. DynamoRIO provides efficient,
transparent, and comprehensive manipulation of unmodified applications
running on stock operating systems (Windows, Linux, or Android) and commodity
IA-32, AMD64, ARM, and AArch64 hardware. Mac OSX support is in progress.
Existing DynamoRIO-based tools
DynamoRIO is the basis for some well-known external tools:
The tracing and analysis framework drmemtrace with multiple tools that operate on both online (with multi-process support) and offline instruction and memory address traces:
Cross-Platform Compatibility: Supports Windows, Linux, Android, and Mac OS X (with ongoing development), ensuring broad applicability.
Efficient Execution: DynamoRIO operates efficiently on stock operating systems without requiring special configurations or hardware.
Audience & Benefit:
Ideal for developers, researchers, and tool builders who need to perform dynamic analysis, optimization, or instrumentation of programs. It provides a robust platform for creating custom tools tailored to specific needs, enhancing productivity and enabling deeper insights into program behavior.
DynamoRIO can be installed via winget on supported platforms, making it easily accessible for integration into development workflows.
The memory address tracing tool memtrace (drmemtrace's offline traces are faster with more surrounding infrastructure, but this is a simpler starting point for customized memory address tracing)
The instruction tracing tool instrace (drmemtrace's offline traces are faster with more surrounding infrastructure, but this is a simpler starting point for customized instruction tracing)
And more, including opcode counts, branch instrumentation, etc.: see API samples
Building your own custom tools
DynamoRIO's powerful API abstracts away the details of the underlying
infrastructure and allows the tool builder to concentrate on analyzing or
modifying the application's runtime code stream. API documentation is
included in the release package and can also be browsed
online. Slides from our past tutorials are
also available.