Research Associate,
Department of Computer Science,
University of Virginia

Home | Research | CV | Links

I did my Masters work at Michigan Technological University using Rocket and Memoria. I spent most of my time there investigating ways to generate effective code for machines with partitioned register files.

I did my PhD dissertation at University of Virginia on a retargetable algorithm for assigning program variables to memory partions in a partitioned memory hierarchy.

Currently, I'm a research scientist at University of Virginia doing post-doc work.

In general, I'm interested in studying compiler/hardware interactions, dynamic translation applications and overhead, and practical security considerations.

My long term research goal is to create techniques and mechanisms for offering reliable, secure, efficient implementations of both legacy and modern applications. Although much work has been done to achieve these goals, it remains possible for a knowledgeable adversary to gain complete control of a system through a security vulnerability. Considering the variety of existing software and our reliance on backwards-compatible computer systems, providing adequate, practical solu-tions to thwart malicious attacks is of utmost importance. In fact, I am writing this research state-ment on a word processor that is compatible with machines that would include an 80386 processor. I will E-mail it using a system that supports 7-bit legacy ASCII and EBCDIC. You will be trusting that the web browser you are using to view this page will not have a vulnerability in it that might be exploited with this (potentially malicious) document. We both expect that these tools will work on our next computer system and have excellent performance and not consume excessive memory. Creating reliable, secure, backwards compatible, and efficient software is an important challenge that the computer science community must address.

Software dynamic translation (SDT) can provide many of these desirable traits. SDT is the programmatic modification of a running binary's instruction stream. In essence, a program exam-ines each instruction of another program before the instruction is translated into a code cache. Then, the translated program is run in the code cache. Unfortunately, much research on SDT sys-tems is needed to provide a reliable, secure mechanism to execute potentially insecure programs. To provide efficient software, I plan to study dynamic translation overhead and optimizations, in particular in conjunction with the memory system. To provide reliable, secure software, I plan to explore a variety of practical security solutions. Since different systems and users have different needs for security, practical security solutions need to be developed with each of these demands in mind, including efficient sandboxing of applications to prevent malicious input from hijacking the system, anti-tampering and obfuscation to protect intellectual property, and security for embedded systems. Since these are lofty goals on a road to solving an important problem, I plan to create a research group (consisting of graduate and undergraduate students, and fellow researchers) to help study these problems.