The support described above has some natural limitations. First of all, the mechanism cannot be used in statically-linked binaries. On the other hand, the set of available dynamically-linked procedure calls may not be enough for some uses that require customizing pieces smaller than functions. Also, some bindings may not be available for manipulation due to static optimizations. In these cases, the scope of the tools can be complemented using binary rewriting techniques (e.g. Paradyn's dynamic instrumentation ) to invoke the backend for events other than dynamically-linked procedure boundaries. However, some systems also use linkage tables to support Position Independent Code. This makes possible to use DITOOLS to control intra-module bindings in addition to external references.
Finally, there are also not-so-obvious considerations to take into account when using all the facilities provided by DITOOLS. The design of existing library services may be inappropriate for dynamic rebinding, because they may keep state between invocations. On the other hand, there are situations in which modules can shortcut linkage tables used in cross-module invocations (e.g. by assigning an address to a pointer and then invoking it directly).