Flings
Apps and tools built by our engineers that are intended to be played with and explored.

Dynamo RIO

Dynamo RIO

Summary

Note: The Dynamo RIO project has moved to it’s own site and is being maintained there.
For current downloads or information, please go to Dynamo RIO.


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 instruction manipulation library. DynamoRIO provides efficient, transparent, and comprehensive manipulation of unmodified applications running on stock operating systems (Windows or Linux) and commodity IA-32 and AMD64.

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.

System Requirements

The following are requirements for DynamoRIO.

  • DynamoRIO currently supports the following NT-based 32-bit Windows systems : NT (all service packs), 2000 (all service packs), XP (32-bit, service packs 0-3), 2003 (32-bit, service packs 0-2), and Vista (32-bit, service packs 0-1). It does not support Windows 95, 98, ME or Server 2008.
  • This release of DynamoRIO has limited support for running 32-bit Windows applications on the following 64-bit Windows operating systems : Windows XP Professional x64 (service pack 2), Windows 2003 x64 (service pack 2), Vista x64 (service packs 0-1). Only the 32-bit code will be seen, and children processes created will not be injected into. On 64-bit Windows, 32-bit applications are automatically run through the Windows-On-Windows or WOW64 emulator so system call and indirect call processing clients must be aware of instr_is_wow64_syscall().
  • This release of DynamoRIO supports running 64-bit Windows applications, using the 64-bit DynamoRIO build, on the following 64-bit Windows systems: Windows XP Professional x64 (service pack 2), Windows 2003 x64 (service pack 2), Vista x64 (service packs 0-1). It does not support any Itanium based Windows systems. For 64-bit applications clients must be compiled for 64-bit with a fixed preferred address in the lower 2GB of the address space (e.g., with the link options /base:"0x72000000" /FIXED). Multiple clients with conflicting base addresses are not supported. The target application may fail to initialize properly or load DynamoRIO if there is an address conflict with the preferred bases of the client or DynamoRIO dlls, but given the choice of bases and the fact that DynamoRIO is loaded quite early we expect this to very rarely be a problem. This limitation will be addressed in future releases.
  • This release does not fully support applications that mix 32-bit and 64-bit code. Future releases will support such mixtures.
  • When running a cygwin application under control of DynamoRIO, stderr and stdout output from DynamoRIO or its clients may not be visible.
  • The statistics viewer DRgui.exe is no longer supported on Windows NT. Statistics still work, but the graphical application itself will not run on NT.
  • This release of DynamoRIO has support for most 32-bit Linux distributions running on Intel-compatible hardware, including Ubuntu 7.04, Ubuntu 8.04, and Fedora 9. It may not support applications using segment registers beyond the standard threading library usage. Future releases will match the Windows version in comprehensive support.
  • This release of DynamoRIO has support for running 32-bit Linux applications on 64-bit Linux operating systems on AMD64-compatible hardware.
  • This release of DynamoRIO has support for running 64-bit Linux applications, using the 64-bit DynamoRIO build. Similarly to 64-bit Windows, clients must set a preferred base address in the lower 2GB of the address space, and multiple clients with conflicting base addresses are not supported. See Building a Client. This limitation will be addressed in future releases.
  • Cross-architecture execve (e.g., a 32-bit process performing execve of a 64-bit executable) may stop working if the paths to the libdynamrio.so and libdrpreload.so libraries are renamed.

Instructions

The following are part of the DynamoRIO release distribution:

  • Four different DynamoRIO libraries: debug and release for each of 32-bit and 64-bit. The debug library enables assertion messages to more easily diagnose API usage errors.
  • The DynamoRIO deployment library and command-line utility drdeploy.exe, for configuring applications to execute under DynamoRIO control (Windows package only).
  • A utility drinject.exe to launch applications under DynamoRIO control (Windows package only).
  • A utility drview.exe for viewing which processes are running under DynamoRIO control (Windows package only).
  • The drdeploy script for configuring and running applications under DynamoRIO on Linux (Linux package only).
  • Header files for the DynamoRIO APIs.
  • This documentation.
  • Sample clients.
  • A graphical statistics viewer DRgui.exe that displays internal DynamoRIO statistics as well as custom statistics defined by a client (see Use of Custom Client Statistics with the Windows GUI, Windows package only). DynamoRIO exports a large number of statistics in its debug build, and a handful in release builds.
  • A binary tracedump reader, which also functions as a sample client using DynamoRIO as a standalone library (see Using DynamoRIO as a Standalone Library).

DynamoRIO is an open source project. For online documentation click here.

Download tutorial for DynamoRIO.

Talk to other Users of DynamoRIO.

Video

Change Log

Engineers

Derek Bruening

Hypervisor

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>