Instrumenting self-modifying code
J. Maebe, K. De Bosschere
Abstract
Adding small code snippets at key points to existing code fragments is called instrumentation. It is an established technique to debug certain otherwise hard to solve faults, such as memory management issues and data races. Dynamic instrumentation can already be used to analyse code which is loaded or even generated at run time.With the advent of environments such as the Java Virtual Machine with optimizing Just-In-Time compilers, a new obstacle arises: self-modifying code. In order to instrument this kind of code correctly, one must be able to detect modifications and adapt the instrumentation code accordingly, preferably without incurring a high penalty speedwise. In this paper we propose an innovative technique that uses the hardware page protection mechanism of modern processors to detect such modifications. We also show how an instrumentor can adapt the instrumented version depending on the kind of modificiations as well as an experimental evaluation of said techniques.
Create a lesson
Related papers
What Should a Software Team Spend on Agents? Simulation-Based Cost Optimization of Mixed AI-Human Teams
Steffen Herbold
Doc2Harness: Benchmarking LLMs on Long-Horizon Harness Engineering of Coding Agents
Yuyao Ge, Shenghua Liu, Peizhong Gao et al.
SWE-Stream: Scaling Executable Training Data for SWE Agents via Progressive Construction and Elastic Streaming
Chengyang Liu, Wen Yang, Shifeng Chen et al.
The Code of Theseus: Can Agents Rebuild Software from Recovered Design Documents?
Cezar Sas, Sandra Mitrović, Fabio Barth et al.
SWE-Nexus: Automated Composition of Software Engineering Tasks from Test Execution
Songwei Yu, Ziqi Miao, Jingxuan Xu et al.
LintEval: Benchmarking LLMs on Linter-Guided File Refactoring
Tongwei Deng, Jinyu Zhu, Yue Cao et al.