title: Scaling static whole-program analysis to modern C and C++ software development
title: statically analyzing C and C++ software with PhASAR
titleType: Subtitle
Creators: name: Schubert, Philipp Dominik
Publisher: name: Universität Paderborn
Year: 2024

description: Statische Analysen mit dem Ziel Bugs und Sicherheitslücken zu finden, müssen präzise und inter-prozedural, d.h. das gesamte Programm umfassend, sein, um Ergebnisse berechnen zu können, die Entwickler:innen tatsächlich helfen. Analysen, die das gesamte Programm überspannen, führen jedoch leider oftmals zu unzureichender Performanz. In dieser Arbeit zeigen wir wie Whole-Program-Analysen in der Praxis dennoch ermöglicht werden können. Das erste Problem, welches bei der Analyse von C und C++ Software gelöst werden muss, ist, dass jedes nicht-triviale Programm auf Grund des Präprozessors in einer gemischten Sprache geschrieben ist und dadurch eine Software-Produktlinie darstellt. Aus diesem Grund präsentieren wir VarAlyzer, einen varabilitäts-bewussten statischen Analyseansatz, der Software-Produktlinien stattdessen als Ganzes analysiert. Um die unnötige wiederholte Analyse von Bibliothekskomponenten, die sich von einem Analyselauf zum nächsten nicht ändern, zu vermeiden, führen wir den kompositionalen Analyseansatz ModAlyzer ein, der Bibliothekskomponenten analysiert und zusammenfasst. Die Analysezusammenfassungen können dann eingesetzt werden, wenn die eigentliche Anwendung analysiert wird, um die Analysezeiten siginifikant zu reduzieren. Um weitere unnötige, wiederholte Analysen für Programmteile zu vermeiden, die häufigen Änderungen unterliegen, stellen wir IncAlyzer vor. IncAlyzer nutzt die Informationen zu den Commits eines Projekts aus, die durch die Versions-Kontrollsysteme der Zielprojekte bereit gestellt werden. Mit diesen Informationen werden Analysen lediglich für die Programmteile erneut berechnet, die sich tatsächlich geändert haben. Dies reduziert die Laufzeiten auch für tiefe, semantische Programmanalysen auf ein Minimum.
description: Static analyses that aim at detecting bugs and security breaches have to be precise and inter-procedural, i.e., must span the whole program to compute results that are actually useful to developers. Analyses run in a whole-program manner, however, oftentimes lead to unsatisfactory performance. In this work, we show how to make precise static whole-program analysis feasible in practice. The first problem that needs to be addressed when analyzing C and C++ software is that every non-trivial program, due to the preprocessor, is written in a mixed language and represents a software product line. We therefore present VarAlyzer, a variability-aware static analysis approach that analyzes software product lines as a whole. To avoid unnecessary, repeated reanalysis of library components that do not change from one analysis run to another, we introduce ModAlyzer, a compositional analysis approach that analyzes and summarizes library components. These summaries can then be employed while analyzing the actual application code to significantly reduce analysis times. To further avoid unnecessary reanalysis for parts of the code that do undergo frequent changes, but whose static analysis results computed in a previous analysis run are still valid, we present IncAlyzer. IncAlyzer exploits commit information provided by the target project's version control system to recompute analysis information only for the parts of the code that actually changed. This reduces analysis times---even for deep, semantic analysis---to a minimum.