Compiler Technology

A compiler is a computer program or a set of computer programs that translates code written in a source language to a target language. The source language is typically a human-readable programming language while the target language is usually a lower-level language, directly executable by a machine. While it is typically desirable that the output code be semantically equivalent to the source code, it is possible to insert other code to realize additional, extra-functional properties, without altering the functional goals of the original program. The members of the compiler technology sub-group work in particular on the following areas:
- Compiler technology for security: the group designs and implement compiler extensions able to analyze the source code (typically, the implementation of a cryptographic primitive) to check whether it is leaking information that should remain secret via a side channel, such as power emissions. If this is the case, the compiler modifies the code to increase the resilience against this kind of vulnerability.
- Compiler support to emerging architectures: the group realizes optimized back-ends for the LLVM compiler targeting novel architectures and explores possible optimizations for the architectures.
- Compilers and runtime libraries for parallel programming models: the group develops compilers and runtime libraries to allow programs written with the target parallel programming language and/or application programming interface can be run on a specific architecture, targeting in particular heterogeneous architectures.
- Reverse-engineering: this is the newest research area (in the past the group has worked on dynamic compilation (2002-2009)). The main aim is to statically translate machine language into the intermediate representation used by the compiler, which can then be compiled to a different machine language (binary-to-binary translation, used to port code for which the source is lost or cannot be obtained), to the same machine language (after modifying the code, e.g. to provide instrumentation for profiling or securization), or to a human-readable programming language (for reverse engineering and analysis).