StackGhost Invented by Mike Frantzen Register window architectures: For now, Sparc v6/v7/v8 %g[0-7] Globals 32 registers total %i[0-7] In %i7 is return address %l[0-7] Local %o[0-7] Out Each time a function call is made, the latter 3 sets "rotate" Globals In Local Out Globals In Local Out Globals In Local Out The processor has a limited set of registers on-chip.. so cpu traps to SPILL & FILL handlers to store registers to memory, or refetch registers from memory -- on the stack. StackGhost: XOR the in-memory copy of %i7 with a per-process random number ("wcookie") Has been held up by GDB support -- will be enabled in OpenBSD 3.6 Might be feasable on other register window architectures: sparc64 ia64 Roughly .0001% performance slowdown