• Inicio

    Profesor: Dr. Juan Manuel Martínez Caamaño (Quarkslab, Francia).

    Contacto con el profesor: jmartinezcaamao [arroba] g m a i l [punto] c o m

    Fechas y horarios: 5 al 15 de noviembre de 2019. Martes, jueves y viernes de 12 a 17h.

    Lugar: Laboratorio 4, Depto. de Computación, Pabellón 1, Ciudad Universitaria.

    Prerrequisitos: Organización de Computadoras 2; Algoritmos y Estructuras de Datos 2; Sistemas Operativos.

    Evaluación: Un trabajo practico final individual.

    Descripción:

    Los compiladores modernos se organizan en 3 etapas: el frontend, encargado de leer el código fuente y asegurar que este sea válido; middle-end, donde la mayor parte de las transformaciones de código ocurren; y backend, que se encarga de emitir código ensamblador. En este curso nos vamos a concentrar en el middle-end.

    Al final del curso los estudiantes deberían ser capaces de comprender la función del middle-end de un compilador, decisiones en su diseño, y poder programar análisis y transformaciones de código: análisis de dataflow, instrumentado, optimización, ofuscación, etc.

    Para esto proponemos de utilizar el framework de compilación llamado LLVM (Low Level Virtual Machine). LLVM es un framework de código abierto, utilizado tanto en la academia como en la industria. Este incluye la especificación del bitcode ejecutado por una máquina virtual, llamado LLVM-IR, y una gama de proyectos que se comunican entre ellos utilizando este bitcode. Esto incluye frontends para diversos lenguajes (C/C++, Fortran, Swift, ...), frameworks de ejecución simbólica (KLEE), herramientas de instrumentado de código (ASAN, TSAN, USAN), backends para diversas arquitecturas (X86 64, arm32/64, mips, etc.), al mismo tiempo que una serie de análisis y optimizaciones de código implementadas sobre este bitcode.