Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er...

149
Datenflussanalyse Java Bytecode Verifier Abstrakte Interpretation Vorlesung Modellierung, Analyse, Verifikation Wintersemester 2012/13 Prof. Barbara K¨ onig ¨ Ubungsleitung: Jan St¨ uckrath Barbara K¨ onig Modellierung, Analyse, Verifikation 1

Transcript of Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er...

Page 1: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Vorlesung Modellierung, Analyse, VerifikationWintersemester 2012/13

Prof. Barbara KonigUbungsleitung: Jan Stuckrath

Barbara Konig Modellierung, Analyse, Verifikation 1

Page 2: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Programmanalyse

Das heutige Programm:

Organisatorisches

Einfuhrendes Beispiel

Problemstellung (Was ist Programmanalyse?)

Anwendungsgebiete

Inhaltsangabe

Syntax und Semantik von While-Programmen

Barbara Konig Modellierung, Analyse, Verifikation 2

Page 3: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Vorstellung

Dozentin: Prof. Barbara Konig

Raum LF 264

E-Mail: barbara [email protected]

Sprechstunde: nach Vereinbarung

Ubungsleitung: Jan Stuckrath

Raum LF 265

[email protected]

Sprechstunde: nach Vereinbarung

Web-Seite:www.ti.inf.uni-due.de/teaching/ws201213/mav/

Barbara Konig Modellierung, Analyse, Verifikation 3

Page 4: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Vorlesungstermine

Termine:

Dienstag, 8:15–9:45 Uhr, im Raum LC 137

Donnerstag, 8:30–10:00 Uhr, im Raum LC 137(jede 2. Woche)

Barbara Konig Modellierung, Analyse, Verifikation 4

Page 5: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Ubung

Termin der Ubung:

Donnerstag, 8:30-10:00 Uhr, LC 137 (jede 2. Woche)

In der Regel wird jeden zweiten Donnerstag statt derVorlesung eine Ubung stattfinden.

Die erste Ubung ist aufgrund des Feiertags am 1.11.ausnahmsweise am Dienstag, den 30.10.

Weitere Ubungstermine: siehe Webseite

Das Ubungsblatt wird eine Woche vor der Ubung auf derWebseite bereitgestellt. Das erste Blatt gibt es also am 23.10.Bitte bereiten Sie sich mit Hilfe des Ubungsblattes auf dieUbung vor!

Barbara Konig Modellierung, Analyse, Verifikation 5

Page 6: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Ubung

Bonusregelung:

Verteilt uber das Semester gibt es drei Testat-Blatter.

Die Losungen zu den Testatblattern werden in derdarauffolgenden Woche direkt in der Ubung abgegeben.

Die anderen Blatter werden nicht korrigiert, aber naturlich inder Ubung besprochen.

Es gibt eine Bonusregelung: der Bonus (eine Notenstufebesser in der Prufung, z.B. 1,7 statt 2,0) wird erzielt, wenn

50 % der Testat-Punkte erzielt,alle Testat-Blatter bearbeitet wurdenund mindestens einmal eine Aufgabe an der Tafelvorgerechnet wurde.

Barbara Konig Modellierung, Analyse, Verifikation 6

Page 7: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Prufung

Master “Angewandte Informatik”

Titel: Modellierung, Analyse, Verifikation (3V+1U)Bereich: Vertiefung der Informatik

Barbara Konig Modellierung, Analyse, Verifikation 7

Page 8: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Prufung

Diplom “Angewandte Informatik”

Die Vorlesung kann unter dem Namen “Programmanalyse” gepruftwerden als:

Fachprufung/Leistungskontrolle in “Informatik der Systeme”(moglicherweise in der bisherigen Variante mit etwas mehrStoff)

Leistungskontrolle im Grundlagenfach

Barbara Konig Modellierung, Analyse, Verifikation 8

Page 9: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Prufung

Die Prufung wird voraussichtlich als mundliche Prufung zufolgendem Termin stattfinden:

Donnerstag, 14. Februar 2013

Barbara Konig Modellierung, Analyse, Verifikation 9

Page 10: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Literatur

Flemming Nielson, Hanne Riis Nielson, Chris Hankin:Principles of Program Analysis, Springer-Verlag, 1999.

David Schmidt: Abstract interpretation and static analysis,International Winter School on Semantics and ApplicationsMontevideo, Uruguay, Juli 2003.http://santos.cis.ksu.edu/schmidt/Escuela03/home.html

Weitere Literatur: siehe Skript

Barbara Konig Modellierung, Analyse, Verifikation 10

Page 11: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Folien & Skript

Folien werden

im Web bereitgestellt und

regelmaßig aktualisiert.

Die Folien des Vorjahres sind ebenfalls verfugbar.

Skript:

Es gibt ein relativ ausfuhrliches Skript (siehe Webseite), daswahrend der Vorlesung vermutlich noch etwas angepaßt wird.

Trotzdem kann es sinnvoll sein, wenn Sie sich wahrend derVorlesung eigene Notizen machen.

Barbara Konig Modellierung, Analyse, Verifikation 11

Page 12: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Verwendete Software

PAG/WWW – Programmanalyse-Generator mitWWW-Interface

gcc – wie optimiert ein C-Compiler?

jasmin – Assembler fur Java-Bytecode (zum Testen des JavaBytecode Verifiers)

Voraussichtlich: Werkzeuge zur Verifikation vonSoftware-Systemen (BLAST)

Barbara Konig Modellierung, Analyse, Verifikation 12

Page 13: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel: Programmoptimierung

Eingabe: a,b Ausgabe: x

x:=a+b;y:=a*b;while (y>a+b) do

x:=0;a:=a+1;x:=a+b

od;if (a>2)

then x := x*yelse x := x*y+a

fi

Barbara Konig Modellierung, Analyse, Verifikation 13

Page 14: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Was ist Programmanalyse? (I)

Berechnung semantischer Eigenschaften eines Programms, ohnedieses Programm auszufuhren(Daher oft auch statische Analyse genannt.)

Moment mal, was ist eigentlich mit dem Satz von Rice?

Jede nichttriviale Eigenschaft einer Turingmaschine (einesProgramms), die sich auf die von der TM berechneteFunktion bezieht, ist unentscheidbar.

Zum Beispiel: Halteproblem fur Turingmaschinen

Ist das nicht ein Widerspruch?

Barbara Konig Modellierung, Analyse, Verifikation 14

Page 15: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Was ist Programmanalyse? (II)

Losung: wir berechnen kein exaktes Analyseergebnis, sondern(uber-)approximieren nur (einseitiger Irrtum)

Exaktes Ergebnis

Ergebnis der Analyse

Gesamtmenge

Zum Beispiel: Menge der Variablen, die an einem bestimmtenProgrammpunkt lebendig sind (d.h. noch gebraucht werden)

Barbara Konig Modellierung, Analyse, Verifikation 15

Page 16: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Anwendungsgebiete

Optimierung im Compilerbau

Typsysteme zum Aufdecken von Laufzeitfehlern

ProgrammverifikationMan mochte zeigen, dass ein Programm erwunschteEigenschaften (Terminierung, Abwesenheit vonLaufzeitfehlern, wechselseitiger Ausschluss, etc.) hat und dasses gegen boswillige Angriffe von außen (z.B. Zugriff aufgeheime Daten) geschutzt ist.

Barbara Konig Modellierung, Analyse, Verifikation 16

Page 17: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Anwendungsgebiete

Allgemeiner:

Besseres Verstandnis von Programmen bzw.Software-Systemen

Fehler fruher aufdecken (moglichst noch in der Planungsphaseoder in fruhen Phasen der Software-Entwicklung)

Vermeiden von verhangnisvollen Software-Fehlern und Crashs,insbesondere bei sicherheitskritischen Anwendungen

Statische Analyse ist eine von mehreren Techniken, die man dazueinsetzen kann (neben Testen, Diagnose, Model-Checking,Theorem-Beweiser, . . . )

Die Forschung in diesem Bereich ist bei weitem noch nichtabgeschlossen!

Barbara Konig Modellierung, Analyse, Verifikation 17

Page 18: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Software-Bugs

Es gibt in der Geschichte der Informatik und der Computer zahlloseBeispiele fur schwerwiegende Software-Fehler, die viel Geld undteilweise sogar Menschenleben gekostet haben:

http://wwwzenger.informatik.tu-muenchen.de/persons/huckle/bugse.html

http://www.devtopics.com/20-famous-software-disasters/

Viele von ihnen hatten durch Anwendung geeigneterProgrammanalyse-Techniken verhindert werden konnen.

Verifikations- und Analysetechniken zur Erkennung und Vemeidungvon Fehlern werden bereits in großerem Stil beim Chip-Designeingesetzt und halten langsam (aber sicher) auch Einzug in dieAnalyse von Softwaresystemen.

Barbara Konig Modellierung, Analyse, Verifikation 18

Page 19: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Inhaltsangabe

While-Programme

Datenflussanalyse

Fixpunkttheorie

Java Bytecode Verifier

Abstrakte Interpretation

GrundlagenPradikatabstraktion und Abstraktionsverfeinerung

Barbara Konig Modellierung, Analyse, Verifikation 19

Page 20: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Datenflussanalyse

Analyse eines Programms anhand desFlussdiagramms

Bei Verzweigungen werden im allgemeinen beide Moglichkeitenbetrachtet

Anwendung: Optimierung im Compilerbau, aber auchProgrammverifikation

Barbara Konig Modellierung, Analyse, Verifikation 20

Page 21: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java Bytecode Verifier

...

Stack

...

Register

Typkorrektheit von Java Bytecode wirduberpruft

Beispiel: Kein Integer-Wert darf als Referenz benutzt werden

Ziel: Vermeidung von Laufzeitfehlern und inkorrekter Verwendungvon Datentypen, was zu Sicherheitslucken fuhren kann

Technik: Datenflussanalyse + Typsystem

Barbara Konig Modellierung, Analyse, Verifikation 21

Page 22: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Abstrakte Interpretation

γ

α

Interpretation eines Programms aufabstrakten Werten

Beispiele:

“gerade”, “ungerade” statt Integer verwenden

“negativ”, “null”, “positiv” statt Integer verwenden

Allgemein: Abstraktionsfunktion α und Konkretisierungsfunktion γ

Anwendung: Verifikation von Programmen, wird auch furnebenlaufige und reaktive Systeme eingesetzt

Barbara Konig Modellierung, Analyse, Verifikation 22

Page 23: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Abgrenzung: “Analyse von Algorithmen”

Analyse vonAlgorithmen Programmanalyse

Analyse von Laufzeitverhalten, SemantischeZeit/Platz-Komplexitat Eigenschaften,

Korrektheit

Benotigte O-Notation, Partielle Ordnungen,Mathematik Kombinatorik, Verbande,

Rekursions- Fixpunkttheoriegleichungen

Barbara Konig Modellierung, Analyse, Verifikation 23

Page 24: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

While-Programme

Variablenbelegungen State = Var→ ZArithmetische Ausdrucke AExp mit AuswertungsfunktionA : AExp× State→ ZBoolesche Ausdrucke BExp mit AuswertungsfunktionB : BExp× State→ {true, false}Syntax:Zuweisung: [x:=a]`

Skip-Anweisung: [skip]`

Bedingte Anweisung: if [b]` then S1 else S2 fiSchleife: while [b]` do S odSequentielle Komposition: S1;S2

Barbara Konig Modellierung, Analyse, Verifikation 24

Page 25: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispielprogramm

[x:=a+b]1;[y:=a*b]2;while [y>a+b]3 do

[a:=a+1]4;[x:=a+b]5

od;[z:=x]6

Barbara Konig Modellierung, Analyse, Verifikation 25

Page 26: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Programme als Flussgraphen

[x:=a+b]1 [y:=a*b]2

[a:=a+1]4

yes [y>a+b]3no

[z:=x]6[x:=a+b]5

flow(S) = {(1, 2), (2, 3), (3, 4), (4, 5), (5, 3), (3, 6)}init(S) = 1

final(S) = {6}

Barbara Konig Modellierung, Analyse, Verifikation 26

Page 27: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Analyse verfugbarer Ausdrucke

Wir wollen nun fur den Eingang und Ausgang jedes Blocksfolgende Menge bestimmen:

Die Menge aller arithmetischen Ausdrucke, die auf allenPfaden bis zu diesem Programmpunkt bereits berechnetwurden und nicht zwischendurch modifiziert wurden.

Barbara Konig Modellierung, Analyse, Verifikation 27

Page 28: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Erwunschtes Analyseergebnis

` AE◦(`) AE•(`)

1 ∅ {a+b}2 {a+b} {a+b, a*b}3 {a+b} {a+b}4 {a+b} ∅5 ∅ {a+b}6 {a+b} {a+b}

[x:=a+b]1 [y:=a*b]2

[a:=a+1]4

yes [y>a+b]3no

[z:=x]6[x:=a+b]5

Barbara Konig Modellierung, Analyse, Verifikation 28

Page 29: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Berechnung des Analyseergebnisses

kill- und gen-Funktionen

kill(`) =

{a′ ∈ AExp∗ | x ∈ Var(a′)}

falls [x:=a]` ∈ blocks(S)∅ sonst

gen(`) =

{a′ ∈ AExp(a) | x 6∈ Var(a′)}

falls [x:=a]` ∈ blocks(S)∅ falls [skip]` ∈ blocks(S)AExp(b) falls [b]` ∈ blocks(S)

AE•(`) = AE◦(`)\kill(`) ∪ gen(`)

Barbara Konig Modellierung, Analyse, Verifikation 29

Page 30: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Datenflussanalyse: Gleichungssystem

AE◦(1) = ∅AE◦(2) = AE•(1)

AE◦(3) = AE•(2)

∩ AE•(5)

AE◦(4) = AE•(3)

AE◦(5) = AE•(4)

AE◦(6) = AE•(3)

AE•(1) = AE◦(1) ∪ {a + b}AE•(2) = AE◦(2) ∪ {a ∗ b}AE•(3) = AE◦(3) ∪ {a + b}AE•(4) = AE◦(4)

\{a + b, a ∗ b, a + 1}AE•(5) = AE◦(5) ∪ {a + b}AE•(6) = AE◦(6)

Barbara Konig Modellierung, Analyse, Verifikation 30

Page 31: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Ordnungen

Eine Ordnung (partielle Ordnung) auf einer Menge L ist eineRelation v ⊆ L× L, fur die gilt:

1 v ist reflexiv: ∀l ∈ L : l v l .

2 v ist transitiv: l1 v l2, l2 v l3 ⇒ l1 v l3.

3 v ist antisymmetrisch: l1 v l2, l2 v l1 ⇒ l1 = l2.

Barbara Konig Modellierung, Analyse, Verifikation 31

Page 32: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Obere Schranken, maximale Elemente

Gegeben: Menge L mit Ordnung v.

Obere Schranke von Y ⊆ L: Element s ∈ L mit ∀l ∈ Y : l v s.

Kleinste obere Schranke/Supremum von Y : Element s fur dasgilt:

s ist eine obere Schranke von Y undfur jede andere obere Schranke s ′ von Y gilt s v s ′.

Maximales Element: m ∈ Y ist ein maximales Element von Y ,wenn fur jedes Element l ∈ Y mit m v l folgt, dass m = l .

Barbara Konig Modellierung, Analyse, Verifikation 32

Page 33: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Untere Schranken, minimale Elemente, Notation

Analog: Definition von unterer Schranke, großter unterer Schranke(Infimum), minimalem Element

Notation:

Supremum von Y :⊔

Y bzw. l1 t l2 =⊔{l1, l2}

Infimum von Y :d

Y bzw. l1 u l2 =d{l1, l2}

Barbara Konig Modellierung, Analyse, Verifikation 33

Page 34: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Vollstandiger Verband

Ein geordnete Menge (L,v) heißt vollstandiger Verband, wenn

jede Teilmenge Y von L eine kleinste obere und einegroßte untere Schranke hat.

Dies gilt auch fur Y = ∅ und Y = L. Man definiert:

⊥ =d

L (bottom, kleinstes Element im Verband)

> =⊔

L (top, großtes Element im Verband)

Barbara Konig Modellierung, Analyse, Verifikation 34

Page 35: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Eigenschaften von Ordnungen, Ketten

Eine Ordnung v heißt total, wenn fur zwei Element l1, l2 ∈ Limmer l1 v l2 oder l2 v l1 gilt.

Y ⊆ L heißt Kette, wenn v eingeschrankt auf Y ×Y total ist.

Aufsteigende Kette: endliche oder unendliche Folgel0, l1, l2, l3, . . . mit li v li+1.Man schreibt auch (ln)n∈N0

.

v erfullt die Ascending Chain Condition, wenn es fur jedeunendliche aufsteigende Kette (ln)n einen Index m gibt mitlj = lj+1 fur j ≥ m.

Barbara Konig Modellierung, Analyse, Verifikation 35

Page 36: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Eigenschaften von Funktionen

Gegeben: geordnete Mengen (L1,v1), (L2,v2)

Eine Funktion f : L1 → L2 heißt

monoton, wenn aus l1 v1 l2 stets f (l1) v2 f (l2) folgt.

additiv, falls fur l ,m ∈ L1 stets f (l tm) = f (l) t f (m) gilt.

multiplikativ, falls fur l ,m ∈ L1 stets f (l um) = f (l) u f (m)gilt.

In den letzten beiden Fallen muss man voraussetzen, dass (L1,v1)und (L2,v2) Verbande sind, damit die Definition Sinn macht.

Barbara Konig Modellierung, Analyse, Verifikation 36

Page 37: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Fixpunkte

Gegeben: f : L→ L, wobei (L,v) ein vollstandiger Verband ist.

Menge aller Fixpunkte: Fix(f ) = {l ∈ L | f (l) = l}Menge aller Prafixpunkte: Pre(f ) = {l ∈ L | f (l) v l}Menge aller Postfixpunkte: Post(f ) = {l ∈ L | f (l) w l}

Außerdem definieren wir:

lfp(f ) =d

Fix(f )

gfp(f ) =⊔

Fix(f )

Achtung: lfp/gfp soll zwar fur least fixed-point/greatest fixed-pointstehen, aber es ist noch nicht klar, ob diese Elemente tatsachlichFixpunkte sind.

Barbara Konig Modellierung, Analyse, Verifikation 37

Page 38: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Satz von Knaster-Tarski

Sei (L,v) ein vollstandiger Verband und f : L→ L eine monotoneFunktion. Dann gilt:

lfp(f ) =l

Pre(f ) ∈ Fix(f )

gfp(f ) =⊔

Post(f ) ∈ Fix(f ).

Folgerung: Die Funktion f hat einen großten und einen kleinstenFixpunkt.

Problem: Wie konnen diese Fixpunkte bestimmt werden?

Barbara Konig Modellierung, Analyse, Verifikation 38

Page 39: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Satz von Kleene

Sei (L,v) ein vollstandiger Verband, f : L→ L eine monotoneFunktion.Falls f stetig ist, das heißt fur jede aufsteigende Kette (ln)n gilt:

f (∞⊔

n=0

ln) =∞⊔

n=0

f (ln),

dann folgt lfp(f ) =∞⊔

n=0

f n(⊥).

Verband erfullt die Ascending Chain Condition Verfahren zurBestimmung von Fixpunkten:

Berechne f (⊥), f (f (⊥)), f 3(⊥), . . . bis die Folge stationarwird. Man erhalt dadurch den kleinsten Fixpunkt.

Barbara Konig Modellierung, Analyse, Verifikation 39

Page 40: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Datenflussanalyse: Gleichungssystem

AE◦(1) = ∅AE◦(2) = AE•(1)

AE◦(3) = AE•(2)

∩ AE•(5)

AE◦(4) = AE•(3)

AE◦(5) = AE•(4)

AE◦(6) = AE•(3)

AE•(1) = AE◦(1) ∪ {a + b}AE•(2) = AE◦(2) ∪ {a ∗ b}AE•(3) = AE◦(3) ∪ {a + b}AE•(4) = AE◦(4)

\{a + b, a ∗ b, a + 1}AE•(5) = AE◦(5) ∪ {a + b}AE•(6) = AE◦(6)

F (N1, . . . ,N6,X1, . . . ,X6) = (∅,X1,X2 ∩ X5,X3,X4,X3,

N1 ∪ {a + b},N2 ∪ {a ∗ b},N3 ∪ {a + b},N4\{a + b, a ∗ b, a + 1},N5 ∪ {a + b},N6)

Barbara Konig Modellierung, Analyse, Verifikation 40

Page 41: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Fixpunktiteration (I)

F 0(AExp∗12) = AExp∗

12

F 1(AExp∗12) = (∅,AExp∗,AExp∗,AExp∗,AExp∗,AExp∗,

AExp∗,AExp∗,AExp∗, ∅,AExp∗,AExp∗)

F 2(AExp∗12) = (∅,AExp∗,AExp∗,AExp∗, ∅,AExp∗,

{a + b},AExp∗,AExp∗, ∅,AExp∗,AExp∗)

F 3(AExp∗12) = (∅, {a + b},AExp∗,AExp∗, ∅,AExp∗,

{a + b},AExp∗,AExp∗, ∅, {a + b},AExp∗)

F 4(AExp∗12) = (∅, {a + b}, {a + b},AExp∗, ∅,AExp∗,

{a + b}, {a + b, a ∗ b},AExp∗, ∅, {a + b},AExp∗)

F 5(AExp∗12) = (∅, {a + b}, {a + b},AExp∗, ∅,AExp∗,

{a + b}, {a + b, a ∗ b}, {a + b}, ∅, {a + b},AExp∗)

Barbara Konig Modellierung, Analyse, Verifikation 41

Page 42: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Fixpunktiteration (II)

F 5(AExp∗12) = (∅, {a + b}, {a + b},AExp∗, ∅,AExp∗,

{a + b}, {a + b, a ∗ b}, {a + b}, ∅, {a + b},AExp∗)

F 6(AExp∗12) = (∅, {a + b}, {a + b}, {a + b}, ∅, {a + b},

{a + b}, {a + b, a ∗ b}, {a + b}, ∅, {a + b},AExp∗)

F 7(AExp∗12) = (∅, {a + b}, {a + b}, {a + b}, ∅, {a + b},

{a + b}, {a + b, a ∗ b}, {a + b}, ∅, {a + b}, {a + b})F 8(AExp∗

12) = (∅, {a + b}, {a + b}, {a + b}, ∅, {a + b},{a + b}, {a + b, a ∗ b}, {a + b}, ∅, {a + b}, {a + b})

Barbara Konig Modellierung, Analyse, Verifikation 42

Page 43: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Erwunschtes Analyseergebnis

F 8(AExp∗12) = (∅, {a + b}, {a + b}, {a + b}, ∅, {a + b},

{a + b}, {a + b, a ∗ b}, {a + b}, ∅, {a + b}, {a + b})

` AE◦(`) AE•(`)

1 ∅ {a+b}2 {a+b} {a+b, a*b}3 {a+b} {a+b}4 {a+b} ∅5 ∅ {a+b}6 {a+b} {a+b}

[x:=a+b]1 [y:=a*b]2

[a:=a+1]4

yes [y>a+b]3no

[z:=x]6[x:=a+b]5

Barbara Konig Modellierung, Analyse, Verifikation 43

Page 44: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Analyse lebendiger Variablen

Eine Variable heißt lebendig am Ausgang eines Blocks, wenn esmoglicherweise einen Pfad von diesem Block zu einem anderenBlock gibt, der diese Variable in einer Bedingung oder auf derrechten Seite einer Zuweisung benutzt, ohne dass die Variablevorher neu definiert wird.

Beispielprogramm: [x:=2]1;[y:=4]2;[x:=1]3;if [y>x]4

then [z:=2*x]5

else [z:=y*y]6

fi;[x:=z]7

Barbara Konig Modellierung, Analyse, Verifikation 44

Page 45: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Analyse lebendiger Variablen

Idee: Ruckwartsanalyse mit Vereinigung

Verband: (P(Var∗),⊆)

kill- und gen-Funktionen:

kill(`) =

{{x} falls [x:=a]` ∈ blocks(S)∅ sonst

gen(`) =

Var(a) falls [x:=a]` ∈ blocks(S)Var(b) falls [b]` ∈ blocks(S)∅ sonst

Barbara Konig Modellierung, Analyse, Verifikation 45

Page 46: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Parameter bei der Datenflussanalyse (I)

Vorwartsanalyse Ruckwartsanalyse

Schnitt Verfugbare Ausdrucke ?

Vereinigung ? lebendige Variable

Auf jeden Fall in der Vergangenheit . . . Schnitt + Vorwartsanalyse

Auf jeden Fall in der Zukunft . . . Schnitt + Ruckwartsanalyse

Moglicherweise in der Vergangenheit . . . Vereinigung + Vorwartsanalyse

Moglicherweise in der Zukunft . . . Vereinigung + Ruckwartsanalyse

Barbara Konig Modellierung, Analyse, Verifikation 46

Page 47: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Parameter bei der Datenflussanalyse (II)

Weitere Parameter:

Obermenge aller Analyseergebnisse (Vollstandiger Verband)

Initialer Analysewert

kill-/gen-Funktionen (allgemein: Transferfunktionen)

Flussrelation mit initialen bzw. finalen Labels

Barbara Konig Modellierung, Analyse, Verifikation 47

Page 48: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Monotone Frameworks

Monotoner Framework (L,F)

L ist ein Verband

F ist eine Menge von monotonen Funktionen von L nach LF enthalt die Identitat und ist unter Funktionskompositionabgeschlossen.

Barbara Konig Modellierung, Analyse, Verifikation 48

Page 49: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Instanz eines monotonen Frameworks

Instanz eines monotonen Frameworks (L,F): (L,F ,Lab,F ,E , ι, f·)

L ist ein Verband

F ist eine Menge von monotonen Funktionen(+ zusatzliche Eigenschaften)

Lab ist eine endliche Menge von Labels

F ⊆ Lab× Lab ist die Flussrelation

E ⊆ Lab ist eine Menge von sogenannten extremalen Labels

ι ∈ L ist der Wert, der jedem extremalen Label zugeordnetwird

f· bildet jedes Label ` ∈ Lab auf eine Funktion f` ∈ F ab.

Barbara Konig Modellierung, Analyse, Verifikation 49

Page 50: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Gleichungssystem

Gleichungssystem zur Datenflussanalyse:

(2.1) A◦(`) =⊔{A•(`′) | (`′, `) ∈ F} t ι`E

wobei ι`E =

{ι falls ` ∈ E⊥ sonst

(2.2) A•(`) = f`(A◦(`))

Barbara Konig Modellierung, Analyse, Verifikation 50

Page 51: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Reichweite von Zuweisungen

Fur jeden Block des Programms und fur jede Variable sollen alleStellen bestimmt werden, an denen dieser Variable zuletzt ein Wertzugewiesen worden sein konnte.

(x, `): x konnte zuletzt in Block ` ein Wert zugewiesen worden sein(x, ?): x wurde evtl. noch gar kein Wert zugewiesen.

Beispielprogramm:

[y := x]1;[z := 1]2;while [y>1]3 do

[z := z*y]4

[y := y-1]5

od;[y:=0]6

Barbara Konig Modellierung, Analyse, Verifikation 51

Page 52: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Reichweite von Zuweisungen

Idee: Vorwartsanalyse mit Vereinigung

Verband: (P(Var∗ × (Lab∗ ∪ {?})),⊆)

Initialer Analysewert: {(x, ?) | x ∈ Var∗}Transferfunktion:

kill(`) =

{{(x, ?)} ∪ {(x, `′) | `′ ∈ Lab∗} falls [x:=a]` ∈ blocks(S)∅ sonst

gen(`) =

{{(x, `)} falls [x:=a]` ∈ blocks(S)∅ sonst

Barbara Konig Modellierung, Analyse, Verifikation 52

Page 53: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Benotigte Ausdrucke

Zu einem Block ` sollen arithmetische Ausdrucke bestimmtwerden, die auf jedem von ` ausgehenden Pfad benutzt werden,ohne vorher verandert zu werden.

Beispielprogramm:

if [x=1]1

then [y := a+b*c]2

else [y := b*c]3

fi

Barbara Konig Modellierung, Analyse, Verifikation 53

Page 54: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Benotigte Ausdrucke

Idee: Ruckwartsanalyse mit Schnitt

Verband: (P(AExp∗),⊇)

Initialer Analysewert: ∅Transferfunktion:

kill(`) =

{{a′ ∈ AExp∗ | x ∈ Var(a′)} falls [x:=a]` ∈ blocks(S)∅ sonst

gen(`) =

AExp(a) falls [x:=a]` ∈ blocks(S)AExp(b) falls [b]` ∈ blocks(S)∅ sonst

Barbara Konig Modellierung, Analyse, Verifikation 54

Page 55: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Monotone Frameworks (Zusammenfassung)

Verfugbare Reichweite von Benotigte Lebendige

Ausdrucke Zuweisungen Ausdrucke Variable

L P(AExp∗) P(Var∗ × (Lab∗ ∪ {?})) P(AExp∗) P(Var∗)

v ⊇ ⊆ ⊇ ⊆t ∩ ∪ ∩ ∪⊥ AExp∗ ∅ AExp∗ ∅ι ∅ {(x, ?) | x ∈ Var(S)} ∅ variabel

E {init(S)} {init(S)} final(S) final(S)

F flow(S) flow(S) flowR(S) flowR(S)

F {f : L→ L | ∃lk , lg ∈ L : f (l) = l\lk ∪ lg}f` f`(l) = l\kill(`) ∪ gen(`)

Barbara Konig Modellierung, Analyse, Verifikation 55

Page 56: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (I)

Eingabe: Instanz eines monotonen Frameworks

Ausgabe: MFP◦, MFP•

Schritt 1 (Initialisierung)W := nil;for all (`′, `) ∈ F do

W := cons((`′, `),W)od;for all ` ∈ Lab do

if ` ∈ Ethen A[`] := ιelse A[`] := ⊥L

fiod

Barbara Konig Modellierung, Analyse, Verifikation 56

Page 57: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (II)

Schritt 2 (Iteration)while W 6= nil do

(`′, `) :=head(W);W := tail(W);if f`′(A[`′]) 6v A[`] then

A[`] := A[`] t f`′(A[`′]);for all `′′ with (`, `′′) ∈ F do

W := cons((`, `′′),W);od

fiod

Barbara Konig Modellierung, Analyse, Verifikation 57

Page 58: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (III)

Schritt 3 (Ausgabe)for all ` ∈ Lab do

MFP◦(`) := A[`];MFP•(`) := f`(A[`])

od

Barbara Konig Modellierung, Analyse, Verifikation 58

Page 59: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

Beispielprogramm:

[y := x]1;[z := 1]2;while [y>1]3 do

[z := z*y]4

[y := y-1]5

od;[y:=0]6

Analyse der Reichweite von Zuweisungen

Barbara Konig Modellierung, Analyse, Verifikation 59

Page 60: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[z:=z*y]4

[y>1]3

[y:=0]6

[y:=y-1]5

{(x, ?), (y, ?), (z, ?)}

Worklist:W = (1, 2)(2, 3)(3, 6)(3, 4)(4, 5)(5, 3)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 61: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[z:=z*y]4

[y:=y-1]5

[y:=0]6

[y>1]3

{(x, ?), (y, ?), (z, ?)}

Worklist:W = (1, 2)(2, 3)(3, 6)(3, 4)(4, 5)(5, 3)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 62: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[z:=z*y]4

[y:=y-1]5

[y:=0]6

[y>1]3

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

Worklist:W = (2, 3)(3, 6)(3, 4)(4, 5)(5, 3)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 63: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[z:=z*y]4

[y:=y-1]5

[y:=0]6

[y>1]3

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

Worklist:W = (2, 3)(3, 6)(3, 4)(4, 5)(5, 3)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 64: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[z:=z*y]4

[y:=y-1]5

[y:=0]6

[y>1]3

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

{(x, ?), (y, 1), (z, 2)}Worklist:W = (3, 6)(3, 4)(4, 5)(5, 3)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 65: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[z:=z*y]4

[y:=y-1]5

[y>1]3

[y:=0]6

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

{(x, ?), (y, 1), (z, 2)}Worklist:W = (3, 6)(3, 4)(4, 5)(5, 3)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 66: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[y:=y-1]5

[y:=0]6

[y>1]3

[z:=z*y]4

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

{(x, ?), (y, 1), (z, 2)}

{(x, ?), (y, 1), (z, 2)}

Worklist:W = (3, 4)(4, 5)(5, 3)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 67: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[y:=y-1]5

[y:=0]6

[y>1]3

[z:=z*y]4

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

{(x, ?), (y, 1), (z, 2)}

{(x, ?), (y, 1), (z, 2)}

Worklist:W = (3, 4)(4, 5)(5, 3)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 68: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[y:=y-1]5

[y:=0]6

[y>1]3

[z:=z*y]4

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

{(x, ?), (y, 1), (z, 2)}

{(x, ?), (y, 1), (z, 2)}

{(x, ?), (y, 1), (z, 2)}

Worklist:W = (4, 5)(5, 3)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 69: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[y:=y-1]5

[y:=0]6

[y>1]3

[z:=z*y]4

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

{(x, ?), (y, 1), (z, 2)}

{(x, ?), (y, 1), (z, 2)}

{(x, ?), (y, 1), (z, 2)}

Worklist:W = (4, 5)(5, 3)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 70: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[y:=y-1]5

[y:=0]6

[y>1]3

[z:=z*y]4

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

{(x, ?), (y, 1), (z, 2)}

{(x, ?), (y, 1), (z, 2)}

{(x, ?), (y, 1), (z, 2)}

{(x, ?), (y, 1), (z, 4)}

Worklist:W = (5, 3)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 71: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[y:=y-1]5

[y:=0]6

[y>1]3

[z:=z*y]4

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

{(x, ?), (y, 1), (z, 2)}

{(x, ?), (y, 1), (z, 2)}

{(x, ?), (y, 1), (z, 4)}

{(x, ?), (y, 1), (z, 2)}

Worklist:W = (5, 3)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 72: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[y:=y-1]5

[y:=0]6

[z:=z*y]4

[y>1]3

neu!

neu!

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

{(x, ?), (y, 1), (z, 2)}

{(x, ?), (y, 1), (z, 4)}

{(x, ?), (y, 1), (z, 2)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}Worklist:W = (3, 6)(3, 4)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 73: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[y:=y-1]5

[y:=0]6

[y>1]3

[z:=z*y]4

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

{(x, ?), (y, 1), (z, 2)}

{(x, ?), (y, 1), (z, 4)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

{(x, ?), (y, 1), (z, 2)}

Worklist:W = (3, 6)(3, 4)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 74: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[y:=y-1]5

[y:=0]6

[y>1]3

[z:=z*y]4

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

{(x, ?), (y, 1), (z, 4)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

{(x, ?), (y, 1), (z, 2)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

Worklist:W = (3, 4)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 75: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[y:=y-1]5

[y:=0]6

[y>1]3

[z:=z*y]4

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

{(x, ?), (y, 1), (z, 4)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

{(x, ?), (y, 1), (z, 2)}

Worklist:W = (3, 4)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 76: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[y:=y-1]5

[y:=0]6

[y>1]3

neu!

[z:=z*y]4

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

{(x, ?), (y, 1), (z, 4)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

Worklist:W = (4, 5)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 77: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[y:=y-1]5

[y:=0]6

[y>1]3

[z:=z*y]4

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

{(x, ?), (y, 1), (z, 4)}

Worklist:W = (4, 5)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 78: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

neu!

[y:=x]1

[z:=1]2

[y:=y-1]5

[y:=0]6

[y>1]3

[z:=z*y]4

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

{(x, ?), (y, 1), (y, 5), (z, 4)}

Worklist:W = (5, 3)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 79: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[y:=y-1]5

[y:=0]6

[y>1]3

[z:=z*y]4

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

{(x, ?), (y, 1), (y, 5), (z, 4)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

Worklist:W = (5, 3)

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 80: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Worklist-Algorithmus (Beispiel)

[y:=x]1

[z:=1]2

[y:=y-1]5

[y:=0]6

[y>1]3

[z:=z*y]4

{(x, ?), (y, ?), (z, ?)}

{(x, ?), (y, 1), (z, ?)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

{(x, ?), (y, 1), (y, 5), (z, 4)}

{(x, ?), (y, 1), (y, 5), (z, 2), (z, 4)}

Worklist:W = nil

Barbara Konig Modellierung, Analyse, Verifikation 60

Page 81: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Gleichungssystem

Gleichungssystem zur Datenflussanalyse:

(3.1) A◦(`) =⊔{A•(`′) | (`′, `) ∈ F} t ι`E

wobei ι`E =

{ι falls ` ∈ E⊥ sonst

(3.2) A•(`) = f`(A◦(`))

Kombiniert:

A◦(`) =⊔{f`′(A◦(`

′)) | (`′, `) ∈ F} t ι`E

Barbara Konig Modellierung, Analyse, Verifikation 61

Page 82: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Tools, die Datenflussanalyse einsetzen

Eine unvollstandige Auswahl:

Compiler (C-Compiler, etc.)

Java Virtual Machine (Java Bytecode Verifier)

Programmanalyse-Generator mit WWW-Interface:PAG/WWW - http://pag.cs.uni-sb.de/

Software-Reengineering und Programmverstehen:Bauhaus, Universitat Stuttgart –http://www.bauhaus-stuttgart.de/

Aufdecken von Laufzeitfehlern:PolySpace - http://www.polyspace.com/

Barbara Konig Modellierung, Analyse, Verifikation 62

Page 83: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Demo: Optimierung im GNU C Compiler

Verwendung des Stacks in ubersetzten Programmen beimMethodenaufruf:

Parameter k

...

Parameter 1

Lokale

Variable

Administra-

tiver Teil

Stack

Arbeits-

StackPointer

Pointer

%esp

%ebp

Administrativer Teil:Gesicherter Base-Pointer,Rucksprungadresse, etc.

Base

RichtungdesStack-Wachstums

Kleinere Adressen

Großere Adressen

Barbara Konig Modellierung, Analyse, Verifikation 63

Page 84: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Beispiel & FixpunkttheorieMonotone FrameworksWorklist-Algorithmus

Ausblick

Weitere Fragestellungen bei Datenflussanalyse:

Interprozedurale Analyse (Prozeduraufrufe,Parameterubergabe, Laufzeitstack)bisher: Intraprozedurale Analyse

Analyse von Pointer-Strukturen bzw. Objektstrukturen

Points-to-AnalyseAlias AnalysisShape Analysis

Barbara Konig Modellierung, Analyse, Verifikation 64

Page 85: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Java Bytecode

Zwischensprache zwischen Hochsprache (Java) undMaschinensprache

Vorteil: Maschinenunabhangigkeit, Geschwindigkeitsvorteilgegenuber Interpretation

Ausfuhrung durch Java Virtual Machine (JVM)

Objekt-Orientierung ist im Bytecode sichtbar: Klassen,Methodenaufrufe, etc.

Problem: SicherheitsluckenZugriff auf beliebige Stellen des Hauptspeichers, z.B. durchVerwendung von Integers als Objekt-Referenzen

Barbara Konig Modellierung, Analyse, Verifikation 65

Page 86: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Klassenhierarchie und Typen

Gegeben: Klassenhierarchie

Class

Class A

Class B Class C

Jede Klasse besitzt Felder undMethoden

Klasse B erbt von A ⇒ B hatmindestens die Felder undMethoden von A

Typen:

Integer ganze ZahlNullT Null-PointerClass cname Klasse cnameClass Super-Klasse

Menge aller Typen: Ty

Es gilt:isref (Integer) = falseisref (NullT) = trueisref (Class cname) = trueisref (Class) = true

Barbara Konig Modellierung, Analyse, Verifikation 66

Page 87: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Register und Stack

Register: Satz von m lokalen Registern, die Elemente vom TypInteger, NullT und Class cname enthalten konnen

Stack: Stack mit Lange ≤ max , mit Push- undPop-Operationen

Objekt der Klasse A

Null-Pointer

17

nicht initialisiert

...

NullT Integer

Register Stack

Typ: Class A

Integer

NullT

Typ:

...

8

Barbara Konig Modellierung, Analyse, Verifikation 67

Page 88: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Befehlssatz (I)

Load n: Inhalt des n-ten Registers auf den Stack (Push)

Store n: Oberstes Stack-Element in n-tes Register (Pop)

AConst Null: Null-Pointer auf Stack legen (Push)

IConst i : Integer i auf Stack legen (Push)

IAdd: Die zwei obersten Stack-Werte (Typ Integer) addierenund das Ergebnis auf Stack legen

Getfield fname ty cname: Referenz auf Objekt der Klassecname vom Stack nehmenInhalt des Feld fname vom Typ ty dieses Objekts holen undauf Stack legen.

Barbara Konig Modellierung, Analyse, Verifikation 68

Page 89: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Befehlssatz (II)

Putfield fname ty cname: Erstes Stack-Element (e) undzweites Stack-Element (Referenz auf ein Objekt der Klassecname) entfernenFeld fname vom Typ ty dieses Objekts den Wert e zuweisen

New cname: Neues Objekt der Klasse cname erzeugen undauf Stack legen (Push).

Invoke cname mname ty 1 ty 2: Erstes Stack-Element(Parameter vom Typ ty 1) und zweites Stack-Element(Referenz auf ein Objekt der Klasse cname) entfernenMethode mname dieses Objekts mit dem Parameter aufrufenund Ruckgabewert (vom Typ ty 2) auf Stack legen

Barbara Konig Modellierung, Analyse, Verifikation 69

Page 90: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Befehlssatz (III)

CmpEq q: Die obersten beiden Werte vom Stack nehmen undmiteinander vergleichen.Bei Gleichheit in Zeile q springen

Return: An die Aufrufstelle der Methode zuruckkehrenDer zuoberst auf dem Stack liegende Wert ist Ruckgabewert(vom Typ ty r )

Eine Methode des Bytecode besteht aus einer Liste vonKommandos der Form ` : cmd , wobei ` (das Label) von 1 bis klauft.

Barbara Konig Modellierung, Analyse, Verifikation 70

Page 91: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Bosartiger Bytecode

1: IConst 10002: IConst 13: Putfield f Integer A

Die Zahl 1000 wird als Referenz auf eine Objekt der Klasse Aangesehen und dadurch an eine Speicherstelle 1000 + x der Wert 1geschrieben.

Andere Sicherheitslucken: Stack-Uberlauf, Addition vonReferenzen, etc.

Barbara Konig Modellierung, Analyse, Verifikation 71

Page 92: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Bytecode Verifier

Idee zur Erkennung von bosartigem Bytecode:

Zuordnung von Typen zu Register- und Stack-Inhalten. DieMenge aller Typen bildet einen Verband.

Durch Datenflussanalyse wird fur jeden Block (jedeProgrammzeile) ein Typ bestimmt, der den moglichenRegister- und Stack-Inhalt an dieser Stelle beschreibt.

Mit Hilfe des Typs an dieser Stelle kann man ablesen, ob einbestimmter Befehl zulassig oder unzulassig ist.

Barbara Konig Modellierung, Analyse, Verifikation 72

Page 93: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Verband (I)

T = {None,Err} ∪ (Ty∗ × ({Undef } ∪ Ty)m)

Partielle Ordnung (Definition in mehreren Schritten)

A vc B ⇐⇒ A ist als Klasse von B abgeleitet

ty 1, ty 2 ∈ Ty = {Integer,NullT,Class,Class A,Class B, . . .}

ty 1 vt ty 2 ⇐⇒ ty 1 = ty 2 ∨(ty 1 = NullT ∧ isref (ty 2)) ∨(isref (ty 1) ∧ ty 2 = Class) ∨(ty 1 = Class A ∧ ty 2 = Class B ∧ A vc B)

Barbara Konig Modellierung, Analyse, Verifikation 73

Page 94: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Verband (II)

Partielle Ordnung aufT = {None,Err} ∪ (Ty∗ × ({Undef } ∪ Ty)m)

None vT t fur alle t ∈ Tt vT Err fur alle t ∈ T(st1, reg 1) vT (st2, reg 2) ⇐⇒

st i = [s i1, . . . , s

ipi

] ∧ reg i = [r i1, . . . , r

im] fur i = 1, 2 ∧

p1 = p2 ∧∀ 1 ≤ j ≤ p1 : (s1

j vt s2j ) ∧

∀ 1 ≤ j ≤ m : (r 1j vt r 2

j ∨ r 2j = Undef )

Barbara Konig Modellierung, Analyse, Verifikation 74

Page 95: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Komponenten des monotonen Frameworks

Labels: Zeilennummern des Java Bytecodes

Flussrelation F : Fur jede Programmzeile der Form` : CmpEq q enthalt die Flussrelation die Paare (`, q) und(`, `+ 1). Fur jede andere Zeile (außer beiReturn-Anweisungen) wird das Paar (`, `+ 1) hinzugefugt.

Extremales Label: 1 (die Nummer der ersten Programmzeile)

Initialer Analysewert : ι = ([], [Class C , p,Undef , . . . ,Undef ]︸ ︷︷ ︸Lange m

)

wobei C die Klasse des Objekts ist, dessen Methodeaufgerufen wird und p der Typ des Funktionsparameters ist.

Es fehlen noch: die Transferfunktionen

Barbara Konig Modellierung, Analyse, Verifikation 75

Page 96: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Typregeln fur den Bytecode Verifier (I)

|st| < max , reg !n 6= Undef

(st, reg) ` Load n

|st| > 0

(st, reg) ` Store n

|st| < max

(st, reg) ` AConst Null

|st| < max

(st, reg) ` IConst i

st = [Integer, Integer] ◦ st ′

(st, reg) ` IAdd

st = [ty 0] ◦ st ′, ty 0 vt Class cname

(st, reg) ` Getfield fname ty cname

st = [ty v , ty 0] ◦ st ′, ty v vt ty , ty 0 vt Class cname

(st, reg) ` Putfield fname ty cname

Barbara Konig Modellierung, Analyse, Verifikation 76

Page 97: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Typregeln fur den Bytecode Verifier (II)

|st| < max

(st, reg) ` New cname

st = [tya, ty 0] ◦ st ′, ty 0 vt Class cname, tya vt ty 1

(st, reg) ` Invoke cname mname ty 1 ty 2

st = [ty 1, ty 2] ◦ st ′, ty 1 = ty 2 = Integer ∨ (isref(ty 1) ∧ isref(ty 2))

(st, reg) ` CmpEq q

st = [ty ] ◦ st ′, ty vt ty r

(st, reg) ` Return

Barbara Konig Modellierung, Analyse, Verifikation 77

Page 98: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Transferfunktionen (I)

f`(t) =

None falls t = Nonetransfer(cmd , t) falls t = (st, reg), (st, reg) ` cmd

und (` : cmd) ∈ blocks(S)Err sonst

transfer(Load n, (st, reg)) = (reg !n ◦ st, reg)

transfer(Store n, (st, reg)) = (rest(st), reg [n 7→ first(st)])

transfer(AConst Null, (st, reg)) = ([NullT] ◦ st, reg)

transfer(IConst i , (st, reg)) = ([Integer] ◦ st, reg)

transfer(IAdd, (st, reg)) = ([Integer] ◦ rest2(st), reg)

Barbara Konig Modellierung, Analyse, Verifikation 78

Page 99: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Transferfunktionen (II)

transfer(Getfield fname ty

cname, (st, reg)) = ([ty ] ◦ rest(st), reg)

transfer(Putfield fname ty

cname, (st, reg)) = (rest2(st), reg)

transfer(New cname, (st, reg)) = ([Class cname] ◦ st, reg)

transfer(Invoke cname mname

ty 1 ty 2, (st, reg)) = ([ty 2] ◦ rest2(st), reg)

transfer(CmpEq q, (st, reg)) = (rest2(st), reg)

transfer(Return, (st, reg)) = (st, reg)

Barbara Konig Modellierung, Analyse, Verifikation 79

Page 100: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Beispiel fur die Analyse des Java Bytecodes

Situation: Klassenhierarchie wie oben (Klassen B, C werden vonKlasse A abgeleitet)

Alle Klassen haben eine Methode m : Integer→ Class C

Klasse C hat ein Feld f : Integer

Eine (unbenannte) Methode der Klasse A vom TypClass B → Class C wird aufgerufen.

Barbara Konig Modellierung, Analyse, Verifikation 80

Page 101: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Beispiel fur die Analyse des Java Bytecodes

Aufgabe: Durchfuhren der Analyse des Java Bytecode Verifiers auffolgendem Code der aufzurufenden Methode:

1: Load 12: IConst 13: Invoke A m Integer C4: Store 05: Load 06: Getfield f Integer C7: IConst 08: CmpEq 19: Load 0

10: Return(Nummerierung der Register beginnt bei 0.)

Barbara Konig Modellierung, Analyse, Verifikation 81

Page 102: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Fehlermeldungen des Java Bytecode Verifiers

Unvollstandige Liste von Fehlermeldungen:

Inconsistent stack height

Accessing value from uninitialized register

Stack size too large

Unable to pop operand off an empty stack

Expecting to find integer on stack

Expecting to find object/array on stack

Incompatible type for getting or setting field

Wrong return type in function

Barbara Konig Modellierung, Analyse, Verifikation 82

Page 103: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Java BytecodeBytecode Verifier

Korrektheit des Java Bytecode Verifiers

Man kann zeigen:

Falls fur das Analyseergebnis des Java Bytecode Verifiers gilt:A◦(`) 6= Err und A•(`) 6= Err fur alle vorkommenden Labels `, sohat das analysierte Programm keine Laufzeitfehler.

(Siehe auch die Liste der Fehlermeldungen.)

Barbara Konig Modellierung, Analyse, Verifikation 83

Page 104: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Abstrakte Interpretation (I)

Grundidee: Ausfuhrung eines Programms auf abstraktenWertenBeispiel: even/odd statt naturlicher Zahlen

Partielle Ordnung auf den abstrakten Werten:∅, {even}, {odd}, {even, odd} mit Inklusion

(je großer, desto ungenauer)

Sprache: While-Programme

Ziel: Programm soll auf einer endlichen Menge von abstraktenWerten (Uberdeckung des gesamten Eingabebereichs)ausgefuhrt werden Uberprufung der Korrektheit

Barbara Konig Modellierung, Analyse, Verifikation 84

Page 105: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Abstrakte Interpretation (II)

Vorteile:

Bei Verzweigungen (If-Then-Else, While) muss (je nachabstrakter Wertebelegung) u.U. nur ein Zweig verfolgt werden genaueres AnalyseergebnisDurch Auswahl der Abstraktionsfunktion hat man Einfluss aufdie Gute des Analyseergebnisses und auf den AufwandZahlreiche Varianten fur verschiedene Arten von Programmen(z.B. fur nebenlaufige Systeme)Korrektheit ergibt sich automatisch, falls abstrakte Operatorengemaß der Theorie bestimmt werden

Nachteile:

i.a. hoherer Aufwand als bei DatenflussanalyseAutomatische Bestimmung der abstrakten Operatorenschwierig

Barbara Konig Modellierung, Analyse, Verifikation 85

Page 106: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Inhalt (Abstrakte Interpretation)

Grundlagen (Galois-Verbindungen)

Abstrakte Semantik von While-Programmen

Automatische Herleitung einer abstrakten Semantik

Anwendung: Verifikation von 16-Bit-Multiplikation

Pradikatabstraktion

Abstraktionsverfeinerung basierend auf Gegenbeispielen

Barbara Konig Modellierung, Analyse, Verifikation 86

Page 107: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Galois-Verbindung

Gegeben seien zwei Verbande (L,v) und (M,v). Ein Paar 〈α, γ〉von monotonen Funktionen

α : L→ M, γ : M → L

heißt Galois-Verbindung genau dann, wenn gilt:

∀ l ∈ L : l v γ(α(l)) ∀m ∈ M : α(γ(m)) v m

γ

α

l

γ

α

m

B B

AA

L = P(A) M = P(B)

Barbara Konig Modellierung, Analyse, Verifikation 87

Page 108: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Eigenschaften von Galois-Verbindungen (I)

Sei 〈α, γ〉 eine Galois-Verbindung mit α : L→ M und γ : M → L,sowie l ∈ L und m ∈ M. Dann gilt:

α(l) v m ⇐⇒ l v γ(m).

Barbara Konig Modellierung, Analyse, Verifikation 88

Page 109: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Eigenschaften von Galois-Verbindungen (II)

Sei 〈α, γ〉 eine Galois-Verbindung mit α : L→ M und γ : M → L.Dann gilt:

(i) Die Konkretisierung γ ist eindeutig durch α bestimmt und esgilt γ(m) =

⊔{l | α(l) v m}.

(ii) Die Abstraktion α ist eindeutig durch γ bestimmt und es giltα(l) =

d{m | l v γ(m)}.

Barbara Konig Modellierung, Analyse, Verifikation 89

Page 110: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Eigenschaften von Galois-Verbindungen (III)

(iii) Es gilt α(⊔

L′) =⊔{α(l) | l ∈ L′} fur L′ ⊆ L. Man sagt auch

α ist vollstandig additiv.

(iv) Es gilt γ(d

M ′) =d{γ(m) | m ∈ M ′} fur M ′ ⊆ M. Man sagt

auch γ ist vollstandig multiplikativ.

(v) Außerdem gibt es zu jeder vollstandig additiven Funktionα : L→ M eine Funktion γ : M → L, so dass 〈α, γ〉 eineGalois-Verbindung ist. Des weiteren gibt es zu jedervollstandig multiplikativen Funktion γ : M → L eine Funktionα : L→ M, so dass 〈α, γ〉 eine Galois-Verbindung ist.

Barbara Konig Modellierung, Analyse, Verifikation 90

Page 111: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Extraktionsfunktionen

Definition von Galois-Verbindungen mit Hilfe vonExtraktionsfunktionen:

Sei β : A1 → A2 eine Abbildung. Definition von α : P(A1)→ P(A2)und γ : P(A2)→ P(A1) in Abhangigkeit von β:

α(A′1) = β(A′1) = {β(a1) | a1 ∈ A′1} fur jedes A′1 ⊆ A1

γ(A′2) = β−1(A′2) = {a1 ∈ A1 | β(a1) ∈ A′2} fur jedes A′2 ⊆ A2

Beispiel: even/odd-Abstraktion mit Extraktionsfunktion

β : Z → {odd , even}

β(z) =

{even falls z ∈ {. . . ,−2, 0, 2, . . . }odd falls z ∈ {. . . ,−3,−1, 1, 3, . . . }

Barbara Konig Modellierung, Analyse, Verifikation 91

Page 112: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Semantik von While-Programmen (I)

〈[x:=a]`, σ〉 → σ[x 7→ A(a, σ)] [ass]

〈[skip]`, σ〉 → σ [skip]

〈S1, σ〉 → 〈S ′1, σ′〉〈S1;S2, σ〉 → 〈S ′1;S2, σ

′〉 [seq1]

〈S1, σ〉 → σ′

〈S1;S2, σ〉 → 〈S2, σ′〉 [seq2]

Barbara Konig Modellierung, Analyse, Verifikation 92

Page 113: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Semantik von While-Programmen (II)

〈if [b]` then S1 else S2 fi, σ〉 → 〈S1, σ〉

falls B(b, σ) = true [if1]

〈if [b]` then S1 else S2 fi, σ〉 → 〈S2, σ〉

falls B(b, σ) = false [if2]

〈while [b]` do S od, σ〉 → 〈S;while [b]` do S od, σ〉

falls B(b, σ) = true [wh1]

〈while [b]` do S od, σ〉 → σ

falls B(b, σ) = false [wh2]

Barbara Konig Modellierung, Analyse, Verifikation 93

Page 114: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Definition: Abstrakte Semantik

Die abstrakte Semantik wird beschrieben durch eine Familienext#

S ,S ′ : Abs→ Abs von Funktionen fur die gilt:

α(nextS ,S ′(γ(abs))) v next#S ,S ′(abs)

fur abs ∈ Abs und alle While-Programme S , S ′ und S ′ =↓.

Wir schreiben auch

〈S , abs〉 =⇒ 〈S ′, abs ′〉, falls next#S,S ′(abs) = abs ′.

〈S , abs〉 =⇒ abs ′, falls next#S ,↓(abs) = abs ′.

Barbara Konig Modellierung, Analyse, Verifikation 94

Page 115: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Hailstone-Programm

[skip]1;while [n6=1]2 do

if [even(n)]3

then [n:=n/2]4;[skip]5

else [n:=3*n+1]6;[skip]7

fiod

Barbara Konig Modellierung, Analyse, Verifikation 95

Page 116: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Abstrakte Interpretation von Hailstone

〈[skip]1;..., {[n 7→ odd ]}〉

��

{[n 7→ odd ]}

〈while [n 6=1]2 ..., {[n 7→ odd ]}〉

��

-5ddddddddddddddddddddddddddddddddddddddd

ddddddddddddddddddddddddddddddddddddddd〈while [n6=1]2 ..., {[n 7→ even]}〉

��〈if [even(n)]3 ..., {[n 7→ odd ]}〉

��

〈if [even(n)]3 ..., {[n 7→ even]}〉

��〈[n:=3*n+1]6;..., {[n 7→ odd ]}〉

��

〈[n:=n/2]4;..., {[n 7→ even]}〉

��〈[skip]7;..., {[n 7→ even]}〉

BC

GF +3

〈[skip]5;..., {[n 7→ even], [n 7→ odd ]}〉

��〈while [n6=1]2 ..., {[n 7→ even], [n 7→ odd ]}〉

��

BC

EDks

〈if [even(n)]3 ..., {[n 7→ even], [n 7→ odd ]}〉@A

GF +3

@A

GF +3

Barbara Konig Modellierung, Analyse, Verifikation 96

Page 117: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Abstrakte Interpretation von While-Programmen

Extraktionsfunktion β : Z→ A

Galoisverbindung (entsteht durch Liften der Extraktionsfunktion):

α : P(State)→ P(Var→ A)

γ : P(Var→ A)→ P(State)

Auswertungsfunktionen auf abstrakten Werten:

Fur arithmetische Ausdrucke:Aabstr : AExp× (Var→ A)→ P(A)

Fur boolesche Ausdrucke:Babstr : BExp× (Var→ A)→ {0, 1, 1/2}

Barbara Konig Modellierung, Analyse, Verifikation 97

Page 118: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Approximation von Operationen

Sichere Approximation von (Basis-)Operationen:Zu jedem Operator op : Zn → Z gibt es einop# : P(A)n → P(A) mit:

op#(A1, . . . ,An) = {β(op(z1, . . . , zn)) | zi ∈ β−1(Ai )}

falls Ai ⊆ A.

Barbara Konig Modellierung, Analyse, Verifikation 98

Page 119: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Auswertung von arithmetischen Ausdrucken

Sei ρ ∈ (Var→ A).

Aabstr (x, ρ) = {ρ(x)}Aabstr (z , ρ) = {β(z)}

Aabstr (op(a1, . . . , an), ρ) = op#(Aabstr (a1, ρ), . . . ,Aabstr (an, ρ))

Barbara Konig Modellierung, Analyse, Verifikation 99

Page 120: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Approximation von Pradikaten

Sichere Approximation von Pradikaten:Zu jedem Pradikat P : Zn → {true, false} gibt es einP# : P(A)n → {0, 1, 1/2} mit

P#(A1, . . . ,An) =

0 fur alle zi ∈ β−1(Ai ) gilt

P(z1, . . . , zn) = false1 fur alle zi ∈ β−1(Ai ) gilt

P(z1, . . . , zn) = true1/2 sonst

wobei A1 ⊆ A, . . . ,An ⊆ A, Ai 6= ∅.Falls eine der Mengen Ai leer ist, kann man P# beliebigfestlegen.

Barbara Konig Modellierung, Analyse, Verifikation 100

Page 121: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Dreiwertige Logik

Drei Wahrheitswerte: 0, 1, 1/2

Wahrheitstafeln:

∧ 0 1 1/2

0 0 0 01 0 1 1/2

1/2 0 1/2 1/2

∨ 0 1 1/2

0 0 1 1/21 1 1 1

1/2 1/2 1 1/2

¬0 11 0

1/2 1/2

Barbara Konig Modellierung, Analyse, Verifikation 101

Page 122: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Auswertung von booleschen Ausdrucken

Sei ρ ∈ (Var→ A).

Babstr (P(a1, . . . , an), ρ) = P#(Aabstr (a1, ρ), . . . ,Aabstr (a1, ρ))

Babstr (¬b, ρ) = ¬Babstr (b, ρ)

Babstr (b1 ∧ b2, ρ) = Babstr (b1, ρ) ∧ Babstr (b2, ρ)

Babstr (b1 ∨ b2, ρ) = Babstr (b1, ρ) ∨ Babstr (b2, ρ)

Achtung: Auf der rechten Seite werden jeweils die Operatoren derdreiwertigen Logik verwendet.

Barbara Konig Modellierung, Analyse, Verifikation 102

Page 123: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Satz (Sichere Approximation)

Es sei a ein arithmetischer Ausdruck und σ : Var→ Z.Dann gilt:

β(A(a, σ)) ∈ Aabstr (a, β ◦ σ)

Des weiteren sei b ein Boolescher Ausdruck.Dann gilt:

B(b, σ) ∈ val(Babstr (b, β ◦ σ)),

wobei

val(b) =

{false} falls b = 0{true} falls b = 1{true, false} falls b = 1/2

Barbara Konig Modellierung, Analyse, Verifikation 103

Page 124: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Abstrakte While-Semantik (I)

〈[x:=a]`, abs〉 =⇒

{ρ[x 7→ a′] | ρ ∈ abs, a′ ∈ Aabstr (a, ρ)} [ass]

〈[skip]`, abs〉 =⇒ abs [skip]

〈S1, abs〉 =⇒ 〈S ′1, abs ′〉〈S1;S2, abs〉 =⇒ 〈S ′1;S2, abs ′〉 [seq1]

〈S1, abs〉 =⇒ abs ′

〈S1;S2, abs〉 =⇒ 〈S2, abs ′〉 [seq2]

Barbara Konig Modellierung, Analyse, Verifikation 104

Page 125: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Abstrakte While-Semantik (II)

〈if [b]` then S1 else S2 fi, abs〉 =⇒

〈S1, abs\{ρ | Babstr (b, ρ) = 0}〉 [if1]

〈if [b]` then S1 else S2 fi, abs〉 =⇒

〈S2, abs\{ρ | Babstr (b, ρ) = 1}〉 [if2]

〈while [b]` do S od, abs〉 =⇒

〈S;while [b]` do S od, abs\{ρ | Babstr (b, ρ) = 0}〉 [wh1]

〈while [b]` do S od, abs〉 =⇒

abs\{ρ | Babstr (b, ρ) = 1} [wh2]

Barbara Konig Modellierung, Analyse, Verifikation 105

Page 126: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Abstrakte next#-Funktionen

next#S,S ′(abs) =

{abs ′ falls 〈S , abs〉 =⇒ 〈S ′, abs ′〉∅ sonst

next#S ,↓(abs) =

{abs ′ falls 〈S , abs〉 =⇒ abs ′

∅ sonst

Barbara Konig Modellierung, Analyse, Verifikation 106

Page 127: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

16-Bit-Multiplikation

[out := 0]1;[overflow := 0]2;while [(f1 6=0) ∧ (overflow=0)]3 do

if [lsb(f1)=1]4

then [(overflow,out) := (out:17) + f2]5

else [skip]6

fi;[f1 := f1 >> 1]7;if [(f1 6=0) ∧ (overflow=0)]8

then [(overflow,f2) := (f2:17)<<1]9

else [skip]10

fiod

Barbara Konig Modellierung, Analyse, Verifikation 107

Page 128: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Abstraktionsverfeinerung

Motivation: Falls die Abstraktion zu grob ist, um die gewunschteEigenschaft zu zeigen, so muss sie verfeinert werden. EineMoglichkeit hierfur ist das sogenannte Counterexample-guidedabstraction refinement (Abstraktionsverfeinerung basierend aufGegenbeispielen)

Barbara Konig Modellierung, Analyse, Verifikation 108

Page 129: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Abstraktionsverfeinerung

ja

nein

Ablauf ist echtAblauf ist unecht

der P verletzt

in der Abstraktion erfullt?groben initialen Abstraktion

Verfeinere die Abstraktion

so, dass der unechte

Ablauf verschwindet

Erfolgreiche Verifikation!Starte mit einer Ist die Eigenschaft P

Finde einen Ablauf r ,

Fehler gefunden!

Barbara Konig Modellierung, Analyse, Verifikation 109

Page 130: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Abstraktionsverfeinerung

Die derzeit erfolgreichste Methode zur Abstraktionsverfeinerungfunktioniert wie folgt:

Extrahiere aus dem Gegenbeispiel Pradikate, d.h., logischeFormeln.

Verwende eine Galoisverbindung, die Variablenbelegungendanach klassifiziert, welche Pradikate sie erfullen (sogenanntePradikatabstraktion).

Bestimme dann – basierend auf der Pradikatabstraktion – dieneue abstrakte Semantik des While-Programms und suchenach neuen Gegenbeispielen.

Dieser Vorgang wird iteriert, wobei die Menge der Pradikate,nach denen abstrahiert wird, immer mehr anwachst.

Barbara Konig Modellierung, Analyse, Verifikation 110

Page 131: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Hoare-Logik

Verwendete Pradikate bzw. Formeln:

Boolesche Ausdrucke mit Existenzquantoren (∃x) undAllquantoren (∀x).

Erweiterung der AuswertungsfunktionB : BExp× State→ {true, false} fur Boolesche Ausdrucke:

Allquantor:

B(∀x p, σ) =

{true falls fur alle z ∈ Z gilt: B(p, σ[x 7→ z ]) = truefalse sonst

Existenzquantor:

B(∃x p, σ) =

{true falls es ein z ∈ Z gibt mit B(p, σ[x 7→ z ]) = truefalse sonst

Barbara Konig Modellierung, Analyse, Verifikation 111

Page 132: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Hoare-Logik

Wir schreiben σ |= b, falls B(b, σ) = true, d.h., σ ist ein Modellfur b.

Folgerung: Wir sagen, dass q eine Folgerung von p ist(p |= q), wenn fur alle σ ∈ State aus σ |= p immer σ |= qfolgt.In diesem Fall sagt man auch: p ist starker als q bzw. q istschwacher als p.

Aquivalenz: Wir sagen, dass p aquivalent zu q ist (p ≡ q),falls sowohl p |= q, als auch q |= p gilt.

Barbara Konig Modellierung, Analyse, Verifikation 112

Page 133: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Hoare-Logik

Hoare-Tripel: gegeben seien zwei Formeln p (Vorbedingung,precondition), q (Nachbedingung, postcondition) und ein Block C(Zuweisung, Skip-Anweisung oder Bedingung). Wir schreiben

{p}C {q},

wenn sichergestellt ist, dass nach Ausfuhrung von C das Pradikatq erfullt ist, wenn vor Ausfuhrung von C das Pradikat p erfullt ist.

Fur eine sequentielle Komposition C1; . . . ; Cn von Blockenschreiben wir {p}C1; . . . ; Cn {q}, falls es Pradikate p1, . . . , pn−1

gibt mit

{p}C1 {p1} {p1}C2 {p2} . . . {pn−2}Cn−1 {pn−1} {pn−1}Cn {q}

Barbara Konig Modellierung, Analyse, Verifikation 113

Page 134: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Hoare-Logik

Anforderungen an Hoare-Tripel:

Zuweisung: Falls {p} [x:=a]` {q}, σ |= p und 〈[x:=a]`, σ〉 → σ′,dann gilt σ′ |= q.

Skip-Anweisung: Falls {p} [skip]` {q}, σ |= p und〈[skip]`, σ〉 → σ′, dann gilt σ′ |= q.

If-Then-Else-Bedingung (Then-Fall): Falls {p} [b]` {q}, σ |= p und〈if [b]` then S1 else S2 fi, σ〉 → 〈S1, σ

′〉, dann gilt σ′ |= q.

If-Then-Else-Bedingung (Else-Fall):Falls {p} [¬b]` {q}, σ |= p und〈if [b]` then S1 else S2 fi, σ〉 → 〈S2, σ

′〉, dann gilt σ′ |= q.

Barbara Konig Modellierung, Analyse, Verifikation 114

Page 135: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Hoare-Logik

While-Schleife (Eintritt in die Schleife):Falls {p} [b]` {q}, σ |= p und〈while [b]` do S od, σ〉 → 〈S;while [b]` do S od, σ′〉, danngilt σ′ |= q.

While-Schleife (Terminierung):Falls {p} [¬b]` {q}, σ |= p und 〈while [b]` do S od, σ〉 → σ′,dann gilt σ′ |= q.

Barbara Konig Modellierung, Analyse, Verifikation 115

Page 136: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Hoare-Logik

Schwachste Vorbedingung: Gegeben sei ein Pradikat q und einBlock C . Dann bezeichnen wir die schwachste Vorbedingung(weakest precondition) p, fur die {p}C {q} gilt, mit wp(C , q). Siekann folgendermaßen ermittelt werden:

Zuweisung: wp([x:=a]`, q) = q[x/a]

Skip-Anweisung: wp([skip]`, q) = q

Bedingung: wp([b]`, q) = (q ∧ b) ∨ ¬b ≡ q ∨ ¬b ≡ b → q

Barbara Konig Modellierung, Analyse, Verifikation 116

Page 137: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Hoare-Logik

Starkste Nachbedingung: Gegeben sei ein Pradikat p und ein BlockC . Dann bezeichnen wir die starkste Nachbedingung (strongestpostcondition) q, fur die {p}C {q} gilt, mit sp(p,C ). Sie kannfolgendermaßen ermittelt werden:

Zuweisung: sp(p, [x:=a]`) = ∃x’ (p[x/x’] ∧ x = a[x/x’])

Skip-Anweisung: sp(p, [skip]`) = p

Bedingung: sp(p, [b]`) = p ∧ b

Barbara Konig Modellierung, Analyse, Verifikation 117

Page 138: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Hoare-Logik

Iteriertes Bilden von schwachsten Vorbedingungen und starkstenNachbedingungen:

wp(C1; . . . ; Cn, q) = wp(C1; . . . ; Cn−1,wp(Cn, q))

sp(p,C1; . . . ; Cn) = sp(sp(p,C1),C2; . . . ; Cn)

Barbara Konig Modellierung, Analyse, Verifikation 118

Page 139: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Hoare-Logik

Aufgabe: Betrachten Sie folgende Folgen von Blocken undbestimmen Sie jeweils die schwachste Vorbedingung fur q = (x<y)und die starkste Nachbedingung fur p = (x=3).

1 [y<z]1;[x:=z+1]2;[z=3]3

2 [x<y-1]1;[skip]2;[x:=x+1]3

Barbara Konig Modellierung, Analyse, Verifikation 119

Page 140: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Hoare-Logik

Undurchfuhrbare Ablaufe (= unechte Gegenbeispiele):Das Hoare-Tripel {true}C1; . . . ; Cn {false} bedeutet, dass derAblauf C1; . . . ; Cn unter keiner Variablenbelegung durchfuhrbar ist.

Beispiele fur undurchfuhrbare Ablaufe:

1 [x=1]1;[x=2]2

2 [x<y]1;[x:=x+1]2;[x>y]3

3 [x:=c]1;[c:=c+1]2;[y:=c]3;[x=m]4;[y=m]5

Barbara Konig Modellierung, Analyse, Verifikation 120

Page 141: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Pradikatabstraktion

Verband fur die Galois-Verbindung:

Gegeben: Menge Var von Variablen und eine Menge {p1, . . . , pn}von Pradikaten uber diesen Variablen.Wir definieren den Verband Abs(p1, . . . , pn):

Zugrundeliegende Menge:

enthalt alle Konjunktionen der Pradikatep1, . . . , pn,¬p1, . . . ,¬pn (wobei kein Pradikat sowohlpositiv als auch negativ vorkommt)true (entspricht der leeren Konjunktion) undfalse (entspricht pi ∧ ¬pi ).

Verbandsordnung: Folgerung |=

Barbara Konig Modellierung, Analyse, Verifikation 121

Page 142: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Pradikatabstraktion

Infimum und Supremum im Verband Abs(p1, . . . , pn):

Infimum von q1, q2 ∈ Abs(p1, . . . , pn):

q1 u q2 ≡ q1 ∧ q2 (falls Pradikate pi , ¬pi zusammentreffen, soerhalt man false)

Supremum von q1, q2 ∈ Abs(p1, . . . , pn):

q1 ∨ q2 ist nicht notwendigerweise im Verband enthalten!

q1 t q2 ist die starkste Formel q ∈ Abs(p1, . . . , pn), fur dieq1 |= q und q2 |= q gilt.

Sei q eine beliebige Formel. Wir schreiben im folgenden q fur diestarkste Formel aus Abs(p1, . . . , pn), fur die q |= q gilt.Das heißt q1 t q2 = q1 ∨ q2.

Barbara Konig Modellierung, Analyse, Verifikation 122

Page 143: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Pradikatabstraktion

Galois-Verbindung fur die Pradikatabstraktion:

Variablenbelegungen σ ∈ State werden danach klassifiziert, ob siebestimmte Pradikate erfullen oder nicht erfullen.

α : P(State)→ Abs(p1, . . . , pn) γ : Abs(p1, . . . , pn)→ P(State)

α(Σ) =⊔{qσ | σ ∈ Σ} γ(q) = {σ | σ |= q}

wobei Σ ⊆ State, q ∈ Abs(p1, . . . , pn).

Außerdem ist qσ die starkste Formel, fur die σ |= qσ gilt. D.h., qσenthalt pi ∈ {p1, . . . , pn}, falls σ |= pi und ¬pi , falls σ 6|= pi .

Barbara Konig Modellierung, Analyse, Verifikation 123

Page 144: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Pradikatabstraktion

Abstrakte Semantik bei der Pradikatabstraktion:

〈[x:=a]`, p〉 =⇒ sp(p, [x:=a]`) [ass] 〈[skip]`, p〉 =⇒ p [skip]

〈S1, p〉 =⇒ 〈S ′1, q〉〈S1;S2, p〉 =⇒ 〈S ′1;S2, q〉

[seq1]〈S1, p〉 =⇒ q

〈S1;S2, p〉 =⇒ 〈S2, q〉[seq2]

〈if [b]` then S1 else S2 fi, p〉 =⇒ 〈S1, sp(p, [b]`)〉 [if1]

〈if [b]` then S1 else S2 fi, p〉 =⇒ 〈S2, sp(p, [¬b]`)〉 [if2]

〈while [b]` do S od, p〉 =⇒ 〈S;while [b]` do S od, sp(p, [b]`)〉 [wh1]

〈while [b]` do S od, p〉 =⇒ sp(p, [¬b]`) [wh2]

Barbara Konig Modellierung, Analyse, Verifikation 124

Page 145: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Pradikatabstraktion

Problem bei der Pradikatabstraktion:

sp(p,C ) (die starkste Formel aus Abs(p1, . . . , pn)), die nach einemBlock gilt, ist im allgemeinen nicht berechenbar(Unentscheidbarkeit!)

Mogliche Losungen:

Uber-Approximation: Berechnen von moglicherweiseschwacheren Nachbedingungen (oft mit Theorembeweisern).

Keine Multiplikation: fur bestimmte Typen von Programmenohne Multiplikation ist die Folgerungsbeziehung entscheidbar(Stichwort: Presburger-Arithmetik)

Endliche Wertebereiche: wir arbeiten nur auf n-stelligenBinarzahlen (Reprasentation von Pradikaten durch BinaryDecision Diagrams)

Barbara Konig Modellierung, Analyse, Verifikation 125

Page 146: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Abstraktionsverfeinerung

ja

nein

Ablauf ist echtAblauf ist unecht

der P verletzt

in der Abstraktion erfullt?groben initialen Abstraktion

Verfeinere die Abstraktion

so, dass der unechte

Ablauf verschwindet

Erfolgreiche Verifikation!Starte mit einer Ist die Eigenschaft P

Finde einen Ablauf r ,

Fehler gefunden!

Barbara Konig Modellierung, Analyse, Verifikation 126

Page 147: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Abstraktionsverfeinerung

Zu losende Probleme:

Wie bestimmt man, ob ein Ablauf unecht ist?

Wie extrahiert man aus einem unechten Ablauf die neuenPradikate?

Barbara Konig Modellierung, Analyse, Verifikation 127

Page 148: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Abstraktionsverfeinerung

Wie bestimmt man, ob ein Ablauf unecht ist? (unechter Ablauf =spurious counterexample)

Gegeben sei ein Ablauf r = C1; . . . ; Cn.

Der Ablauf r ist unecht genau dann, wenn {true} r {false}.

Das ist dann der Fall wenn

wp(r , false) ≡ true oder

sp(true, r) ≡ false

(Evtl. Probleme mit der Unentscheidbarkeit der Aquivalenz.)

Barbara Konig Modellierung, Analyse, Verifikation 128

Page 149: Vorlesung Modellierung, Analyse, Veri kation ... · Daten ussanalyse Java Bytecode Veri er Abstrakte Interpretation Vorlesung Modellierung, Analyse, Veri kation Wintersemester 2012/13

DatenflussanalyseJava Bytecode Verifier

Abstrakte Interpretation

Grundlagen der abstrakten InterpretationAbstrakte Semantik von While-ProgrammenPradikatabstraktion und Abstraktionsverfeinerung

Abstraktionsverfeinerung

Sei r = C1; . . . ; Cn ein unechter Ablauf und seien p1, . . . , pn−1

Pradikate mit

{true}C1 {p1}C2 {p2} . . . {pn−2}Cn−1 {pn−1} Cn {false}

Durch das Hinzufugen der Pradikate p1, . . . , pn−1 zum Verbandverschwindet der unechte Ablauf.

Barbara Konig Modellierung, Analyse, Verifikation 129