The goal of the course is that of providing the basic tools for understanding, designing and using (static and dynamic) analysis tools on computational systems aiming at verifying properties and/or extracting functionalities of systems under analysis. In the context of the CdS, the course provides context knowledge and cross capabilities useful for analyzing computational systems both from the developer point of view and from the point of view of who aims at extracting functionalities from unknown systems (reverse engineering). At the end of the course, the student will be able to show knowledge and comprehension capabilities that allow him/her to elaborate and/or apply original ideas in the fields of system analysis and in particular program analysis, potentially in research contexts; to solve problems of system and program analysis in new and not familiar fields, included in wider contexts, related to their field of study; to study and to search for study material concerning system and program analysis in autonomy.
Formal basis: Lattice theory, fix-point theory, abstract interpretation, models and semantcs of programs.
Static analysis: CFG-based analyses and monotone framework, distributive Data-flow analyses, numerical analyses and alias analysis, inter-procedural analysis, SSA.
Slicing: Formal framework, Weiser's algorithm, HPR algorithm, forward vs backward slicing.
Dynamic analysis: Overview on debugging, profiling and testing, disassembly, decompiling; Emulation and virtualization, Testing, Monitoring.
Lab: Introduction and use of tools for testing and dynamic analysis of code.
|Seidl, Helmut, Wilhelm, Reinhard, Hack, Sebastian||Compiler Design Analysis and Transformation (Edizione 1)||Springer||2012||978-3-642-17548-0|
|Keith Cooper, Linda Torczon||Engineering a Compiler, Second Edition (Edizione 2)||Elsevier||2012||012088478X|
|F. Nielson, H. R. Nielson and C. Hankin||Principles of Program Analysis||Springer-Verlag||1999|
The exam is structured in two parts and may be completed in two different manners:
- Written exam + Project
- Written exam + Oral (mandatory for evaluation greater than 26)
The goal of the written exam is that of verifying a sufficient understanding of the notions presented during the course. The goal of the project is that of verifying the capability of retrieving study material and of re-elaborating independently and in autonomy the notions acquired during the course.
The goal of the oral exam is that of verifying an advanced understanding of the notions presented during the course and a clear capability of re-elaborating the studied notions.
Written exam: set of questions on the whole program of the course
Project: detailed study of a specific problem or case study in the context of program analysis (written relation+presentation with slides)
Oral exam: questions on the whole program of the course