This project aims to investigate software whose code can change during its execution. Such code is ubiquitous in modern systems. For example, all modern web browsers contain a component, known as a JIT compiler, that creates or modifies code during execution. Reasoning about relationships between the code that carries out the runtime modifications, and the code that is created or modified as a result, is important for a number of software security applications. For example, bugs in a JIT compiler can result in vulnerabilities that can be exploited by hackers. Currently, such reasoning is performed manually. Because of the size and complexity of software that uses code that is created or modified during execution, such manual reasoning is difficult, slow, tedious, and error-prone. This project aims to develop concepts, techniques, and tools to automate this process and make it faster and easier to reason about and understand the behavior of such software. Potential benefits of the project include improved software security and training undergraduate and graduate students, including members of underrepresented minorities, in advanced research techniques.
The project will focus on developing concepts, techniques, and algorithms for reasoning about code that can be created or modified at runtime ("dynamic code") that are not predicated on specific technologies or implementation artifacts, and will articulate clearly any underlying assumptions. Its research activities will focus on the following topics: (1) identification of suitable representations for the computational structure of dynamic code so as to make it possible to reason about end-to-end information flow, i.e.,information flow between the code that performs dynamic code modification and the code that is modified as a result; (2) identification of appropriate notions of dependency that can adequately capture end-to-end information flow in dynamic code; extension of analyses developed for static code to work on dynamic code in a natural way. (3) the evaluation of these ideas to determine how well they work in practice in the context of real-world applications such as bug localization in JIT compilers.
|