![]() |
An Application Program Interface (API) for Runtime Code Generationi |
![]() |
Version 6.1, released on December 8, 2009. Improvements from version 6.0 include:
Also included in this release is SymtabAPI 6.1, StackwalkerAPI 1.1, InstructionAPI 1.1, and DepgraphAPI 1.0.
- Major performance improvements in Dyninst generated instrumentation code
- Binary rewriter support for shared libraries
- Improvements to code parsing with stripped binaries
- Full integration with InstructionAPI on x86-based platforms
- Assorted bug fixes
The normal cycle of developing a program is to edit source code, compile it, and then execute the resulting binary. However, sometimes this cycle can be too restrictive. We may wish to change the program while it is executing, and not have to re-compile, re-link, or even re-execute the program to change the binary. Applications that can make use of this dynamic code adaptation system include:
We have created an Application Program Interface (API) to permit the insertion of code into a running program. The goal of this API is to provide a machine independent interface to permit the creation of tools and applications that use runtime code patching. This API is based on the idea of Dynamic Instrumentation described in [1, 2] and used in the example here.
A variety of tools have been built using dyninst.
We have released version 6.1 of the API. This release supports Power/PowerPC (AIX), SPARC (Solaris), x86 (Linux and Windows NT/2K/XP), and ia64 (Linux).
The results of the daily regression tests at Maryland and Wisconsin can be viewed here.
Note: these are the results for the most current snapshot of the CVS tree, not the current release. As a result, sometimes a large number of test cases might fail one day due to a bad commit by one of the dyninst developers.
We have posted code coverage statistics for the dyninst test cases.