Ich mache einen Kurs über abstrakte Interpretation, aber ich habe keine Beispiele gesehen, wie die Theorie auf den tatsächlichen Code abbildet.
Ich suche nach kurzen Codebeispielen, wo ich vorzugsweise nicht mit einem ganzen Compiler arbeiten muss. Die Analyse muss nicht nützlich sein, ich möchte nur ein Beispiel sehen, in dem die Analyse abgeleitet und dann implementiert wird.
Kennt jemand solche Beispiele, vielleicht aus einem Universitätskurs?
Es gibt MonoREIL, das mit dem kürzlich geöffneten Tool BinNavi geliefert wird.
Siehe hier ist ein kurzes Intro.
Beachten Sie, dass der Kontext des MonoREIL-Frameworks keine Compiler, sondern die Analyse von Binärcode ist. Es wurde jedoch für Anwendungen in der realen Welt verwendet, siehe Folie 34 ff. Von dieser Einführung (die mehr enthält formaler Hintergrund).
AI
basiert auf einer mathematischen Theorie namens Galois Verbindung. Die Theorie ist sehr einfach:
Galois connection
: Um das Programm Actual
und Abstract
zu verknüpfen.
Dies ist das beste Tutorial, das ich bisher über Abstract gesehen habe Interpretation:
Vielleicht ist dieses Tool auch für Sie interessant: Interproc Analyzer
Es ist ein abstrakter Analysator für eine sehr einfache Sprache, die jedoch bietet interprozedurale Analysen. Sie können die Analyse ausprobieren und numerische Invarianten über das analysierte Programm erhalten. Der Quellcode ist verfügbar (OCaml).
Ein wirklich gründlicher und präziser Kurs, gegeben von einem der "Schöpfer" der abstrakten Interpretation, Patrick Cousot (bereits in einer der Antworten erwähnt): MIT-Kurs über abstrakte Interpretation . Der Kurs bietet auch Aufgaben in OCaml.
Es gibt dieses Papier von Bertot
Strukturelle abstrakte Interpretation, Eine formelle Studie mit Coq
Dies ermöglicht eine vollständige Implementierung eines abstrakten Interpreters für eine einfache Spielzeugsprache mit dem Coq Proof Assistant. Ich benutzte dies für eine konkrete Referenz und fand es nützlich, wenn auch etwas schwierig, was angesichts der Thematik zu erwarten ist. Coq ist ein großartiges kleines Stück Software.
Ich bin auch in einem Cousot-Papier begegnet:
grobe Details (aber ich bin mir sicher, dass es nützliche Zitierungen für alle Details geben wird) von einer Implementierung in Astrée, ich bin nicht vertraut mit Astrée, also habe ich diesen Abschnitt nicht gelesen, aber ich denke, dass er Ihren Kriterien entspricht.
Wenn Sie nicht mehr herkommen, lassen Sie es mich wissen! Ich würde besonders gerne einen abstrakten Prolog-Interpreter sehen.
Tags und Links abstract-interpretation