Použití šablon změn kódu počas analýzy ekvivalence programů - Šilling, Petr (Vysoké učení technické v Brně. Fakulta informačních technologií, 2021)
Cílem této práce je návrh statické analýzy pro rozpoznávání vzorů, popisujících často se vyskytující změny mezi různými verzemi nízkoúrovňového kódu. V rámci práce je navržen způsob kódování vzorů, využívající vnitřní reprezentaci LLVM, a algoritmus pro hledání vzorů založený na postupném porovnávání instrukcí podle toku řízení. Navržená analýza byla implementována jako rozšíření nástroje DiffKemp pro analýzu sémantických rozdílů různých verzí rozsáhlých projektů napsaných v jazyce C. Výsledky experimentů provedených na třech dvojicích minulých verzí linuxového jádra ukazují, že navržené rozšíření dokáže eliminovat podstatné množství falešně pozitivních či obecně nežádoucích rozdílů z výsledků porovnání nástrojem DiffKemp, které by jinak vyžadovaly manuální kontrolu.

The goal of this thesis is to propose a static analysis method for recognition of code change patterns describing recurrent changes between different versions of low-level code. The thesis proposes an encoding method of patterns, which uses the LLVM intermediate representation, and a pattern matching algorithm based on gradual comparison of instructions according to their control flow. The proposed analysis has been implemented as an extension of DiffKemp, a tool for analysing semantic differences between versions of large C projects. Results of experiments conducted on three pairs of past versions of the Linux kernel show that the extension is able to eliminate a substantial amount of false-positive or generally undesirable differences from the output of DiffKemp, which would otherwise require manual inspection.
Applying Code Change Patterns during Analysis of Program Equivalence
Keywords: DiffKemp; SimpLL; LLVM; Clang; GNU/Linux kernel; porovnávání vzorů změn kódu; reprezentace vzorů změn kódu; izomorfismus podgrafů; analýza sémantických rozdílů mezi programy; refaktorovací vzory; LLVM metadata; vnitřní reprezentace LLVM; graf toku řízení; odstraňování falešně pozitivních hlášení; DiffKemp; SimpLL; LLVM; Clang; GNU/Linux kernel; code change pattern matching; code change pattern representation; subgraph isomorphism; semantic difference analysis; refactoring patterns; LLVM metadata; LLVM intermediate representation; control-flow graph; elimination of false-positive reports