Dynamic analyses such as profiling program execution are widely used because they can measure various aspects of the runtime behavior of a software system and have a wide range of applications in software engineering. These analyses are typically carried out by adding probes to the software, which imposes space/time overhead, is intrusive, and can negatively affect software behavior. To address these issues, we propose a novel approach that allows for analyzing software behavior accurately and non-intrusively by leveraging the electromagnetic emissions produced by a computer as it executes code. Our approach can collect runtime information about a software system by simply placing a device next to the system. It can thus not only enable profiling for a variety of software systems for which this was previously impossible (e.g., embedded systems), but also benefit dynamic analyses in more traditional contexts.
This project will combine various machine learning and static analysis techniques to build likely electromagnetic signatures for different code patterns, investigate which code granularity provides the most accurate matching of electromagnetic emissions to code, and explore adaptive and hierarchical techniques for performing this matching at runtime. This research is inherently interdisciplinary and promises to break new ground and have broader impact in several combined areas, including software engineering, programming languages, computer architecture, and electromagnetics. Unlike previous work on electromagnetic emissions analysis, our approach will collect runtime information that is fine-grained enough to measure the execution of short sequences of statements, if not individual instructions. This will let us apply our approach to several software engineering tasks. In fact, if successful, this research will both provide a solid conceptual foundation, which other researchers will be able to leverage, and investigate a set of specific techniques and tools that build on this foundation to support tasks such as zero-overhead performance measurement, debugging, and anomaly detection.