A recompilation and instrumentation-free monitoring architecture for detecting heap memory errors and exploits