Dynamic instruction stream editing
This dissertation proposes a novel, cooperative hardware/software mechanism, called DISE (dynamic instruction stream editor), for efficiently transforming programs. DISE transforms programs using programmable instruction macro-expansion. It resides within the processor inspecting every fetched instruction. Based on user-defined rules, it macro-expands some of those instructions into parameterized replacement sequences.
DISE can express a broad range of transformations including transformations for profiling program characteristics, implementing interactive debugging primitives, decompressing compressed programs, and detecting stack and pointer smashing attacks. This dissertation describes the functionality, interface, and system architecture of DISE and proposes one implementation of this architecture. Our evaluation demonstrates that DISE transformation is highly efficient. Unlike transformation mechanisms implemented entirely in software, DISE has no impact on instruction cache performance because it transforms instructions within the processor. Furthermore, the performance cost of macro-expanding instructions is neglible, which is not true of software mechanisms (although some mechanisms transform code statically rather than at runtime). The only significant performance cost of DISE transformation is executing the additional instructions, and this overhead is usually less than 25% for most transformations and benchmarks.