There are other approaches to manipulating or observing code at runtime. These include sampling and caching traces only, which work well for optimization, but are not comprehensive.
There are a number of runtime tools that modify the original application code via trampolines. However, trampolines are not transparent, especially on variable-length instruction sets like x86, and they do not scale -- they work well for inserting calls to instrumentation routines here and there, but not for modifying code.
Whole-system emulators make use of code caches, but many require hardware support, or are too heavyweight for our purposes.
Systems most similar to ours include Strata and Valgrind, but neither addresses our transparency or efficiency goals effectively.
|Copyright © 2004 Derek Bruening|