SlideServe
Menu
Préférences
© SlideServe · v2026

Advanced Techniques in Iterative Program Analysis and Abstract Interpretation

xenos avatar
44 diapositives · 579 Views · Oct 15, 2014

This lecture discusses iterative program analysis through abstract interpretation, a fundamental technique for reasoning about program behavior. It covers chaotic iterations, the relationship between concrete and abstract semantics, and the complexities involved in backward analysis. The session emphasizes soundness and completeness via Galois connections and explores tactics for maintaining precision in program analysis. Key concepts include shape analysis, widening/narrowing methods, and practical examples showcasing the effectiveness of abstract interpretation in identifying design bugs and improving analysis precision.

Advanced Techniques in Iterative Program Analysis and Abstract Interpretation - slide 1
01 / 44Advanced Techniques in Iterative Program Analysis and Abstract Interpretation
1 / 17

Télécharger la présentation

Advanced Techniques in Iterative Program Analysis and Abstract Interpretation
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  1. Iterative Program AnalysisAbstract Interpretation Mooly Sagiv http://www.cs.tau.ac.il/~msagiv/courses/pa11.html Tel Aviv University 640-6706 Textbook: Principles of Program Analysis Chapter 4 CC79, CC92

  2. Outline • Reminder Chaotic Iterations • The abstract interpretation technique • Relating Concrete and Abstract Interpretation • More examples • Precision • Later • Backward analysis • Complexity • Widening and Narrowing • Shape Analysis

  3. Specialized Chaotic IterationsSystem of Equations S = dfentry[s] =  dfentry[v] = {f(u, v) (dfentry[u]) | (u, v)  E } FS:LnLn FS(X)[s] =  FS(X)[v]= {f(u, v)(X[u]) | (u, v)  E } lfp(S) = lfp(FS)

  4. Specialized Chaotic Iterations Chaotic(G(V, E): Graph, s: Node, L: Lattice, : L, f: E (L L) ){ for each v in V to n do dfentry[v] :=  df[s] =  WL = {s} while (WL  ) do select and remove an element u  WL for each v, such that. (u, v) E do temp = f(e)(dfentry[u]) new := dfentry(v) temp if (new  dfentry[v]) then dfentry[v] := new; WL := WL {v}

  5. [x0, y0, z0] 1 z =3 e.e[z3] 2 x =1 e.e[x1] e. if e x 0 then e else  3 while (x>0) e. if x >0 then e else  4 if (x=1) e. if e x 0 then e else  e. e [x1, y , z] 5 6  y =7 y =z+4 e.e e.e[y7] e.e[ye(z)+4] 7 x=3 e.e[x3] 8 print y

  6. Complexity of Chaotic Iterations • Parameters: • n the number of CFG nodes • k is the maximum outdegree of edges • A lattice of height h • c is the maximum cost of • applying f(e) •  • L comparisons • ComplexityO(n * h * c * k)

  7. The Abstract Interpretation Technique (Cousot & Cousot) • The foundation of program analysis • Defines the meaning of the information computed by static tools • A mathematical framework • Allows proving that an analysis is sound in a local way • Identify design bugs • Understand where precision is lost • New analysis from old • Not limited to certain programming style

  8. Operational semantics statement s statement s Abstract semantics Abstract (Conservative) interpretation Set of states Set of states abstraction abstraction abstract representation abstract representation abstract representation 

  9. Operational semantics statement s Set of states concretization statement s Abstract semantics Abstract (Conservative) interpretation Set of states Set of states  concretization abstract representation abstract representation

  10.   Abstract  Descriptors of sets of stores Abstract Interpretation Concrete Sets of stores

  11. Galois Connections • Lattices Cand A and functions : C A and : AC • The pair of functions (, ) form Galois connectionif •  and  are monotone •  a  A • ( (a)) a •  c  C • c   ((C)) • Alternatively if: c  C  a A (c)  a iff c  (a) •  and  uniquely determine each other

  12. The Abstraction Function (CP) • Map collecting states into constants • The abstraction of an individual stateCP:[Var* Z]  [Var* Z{, }]CP() =  • The abstraction of set of statesCP:P([Var* Z])  [Var* Z{, }] CP (CS) =  { CP () |   CS} = {|   CS} • SoundnessCP (Reach (v))  df(v) • Completeness

  13. The Concretization Function • Map constants into collecting states • The formal meaning of constants • The concretizationCP: [Var* Z{, }] P([Var* Z])  CP (df) = {| CP ()  df} = { |   df} • SoundnessReach (v)  CP (df(v)) • Completeness

  14. Galois Connection Constant Propagation • CP is monotone • CP is monotone •  df [Var* Z{, }] •  CP( CP (df))  df •  c  P([Var* Z]) • c CP  CP ( CP(C))

  15. Upper Closure (CP)

  16. Proof of Soundness • Define an “appropriate” operational semantics • Define “collecting” structural operational semantics • Establish a Galois connection between collecting states and abstract states • (Local correctness) Show that the abstract interpretation of every atomic statement is soundw.r.t. the collecting semantics • (Global correctness) Conclude that the analysis is sound

  17. Collecting Semantics • The input state is not known at compile-time • “Collect” all the states for all possible inputs to the program • No lost of precision

  18. {[x1, y0, z3], [x3, y0, z3],} A Simple Example Program {[x0, y0, z0]} z = 3 x = 1 while (x > 0) ( if (x = 1) then y = 7 else y = z + 4 x = 3 print y ) {[x0, y0, z3]} {[x1, y0, z3]} {[x1, y7, z3], [x3, y7, z3]} {[x1, y7, z3], [x3, y7, z3]} {[x3, y7, z3]} {[x3, y7, z3]}

  19. Another Example x= 0 while (true) do x = x +1

  20. An “Iterative” Definition • Generate a system of monotone equations • The least solution is well-defined • The least solution is the collecting interpretation • But may not be computable

  21. Equations Generated for Collecting Interpretation • Equations for elementary statements • [skip]CSexit(1) = CSentry(l) • [b]CSexit(1) = {:  CSentry(l), b=tt} • [x := a]CSexit(1) = {(s[x Aas]) | s  CSentry(l)} • Equations for control flow constructsCSentry(l) =  CSexit(l’) l’ immediately precedes l in thecontrol flow graph • An equation for the entryCSentry(1) = { |  Var* Z}

  22. Specialized Chaotic IterationsSystem of Equations (Collecting Semantics) S = CSentry[s] ={0} CSentry[v] = {f(e)(CSentry[u]) | (u, v)  E } where f(e) = X. {st(e)  |  X} for atomic statements f(e) = X.{ | b(e)  =tt } FS:LnLn Fs(X)[v] = {f(e)[u] | (u, v)  E } lfp(S) = lfp(FS)

  23. The Least Solution • 2n sets of equationsCSentry(1), …, CSentry (n), CSexit(1), …, CSexit (n) • Can be written in vectorial form • The least solution lfp(Fcs) is well-defined • Every component is minimal • Since Fcs is monotone such a solution always exists • CSentry(v) = {s|s0| <P, s0 > * (S’, s)), init(S’)=v} • Simplify the soundness criteria

  24.  f() f#() f2() f#2() f(x)x f(x)=x f#(y)=y f#(y)y f2() f#2() f(x)x f#(y)y f() f#()   a: f((a))  (f#(a)) gfp(f) gfp(f#)  lfp(f) lfp(f#)

  25. f  Lfp(f)  f# f  f#  f# f  Finite Height Case Lfp(f#)  

  26. Soundness Theorem(1) Let(, ) form Galois connection from C to A f: C  C be a monotone function f#: A  A be a monotone function aA: f((a))  (f#(a)) lfp(f)  (lfp(f#)) (lfp(f))  lfp(f#)

  27. Soundness Theorem(2) Let(, ) form Galois connection from C to A f: C  C be a monotone function f#: A  A be a monotone function cC: (f(c))  f#((c)) (lfp(f))  lfp(f#) lfp(f)  (lfp(f#))

  28. Soundness Theorem(3) Let(, ) form Galois connection from C to A f: C  C be a monotone function f#: A  A be a monotone function aA: (f((a)))  f#(a) (lfp(f))  lfp(f#) lfp(f)  (lfp(f#))

  29. Proof of Soundness (Summary) • Define an “appropriate” structural operational semantics • Define “collecting” structural operational semantics • Establish a Galois connection between collecting states and reaching definitions • (Local correctness) Show that the abstract interpretation of every atomic statement is soundw.r.t. the collecting semantics • (Global correctness) Conclude that the analysis is sound

  30. Example Dataflow Problem • Formal available expression analysis • Find out which expressions are available at a given program point • Example program x = y + t z = y + r while (…) { t = t + (y + r) } • Lattice • Galois connection • Basic statements • Soundness

  31. Example: May-Be-Garbage • A variable x may-be-garbageat a program point v if there exists a execution path leading to v in which x’s value is unpredictable: • Was not assigned • Was assigned using an unpredictable expression • Lattice • Galois connection • Basic statements • Soundness

  32. The PWhile Programming Language Abstract Syntax a := x | *x | &x | n | a1 opa a2 b := true | false | not b | b1 opb b2 | a1 opr a2 S := x := a | *x := a | skip | S1 ; S2|if b then S1else S2 | while b do S

  33. Concrete Semantics for PWhile State1= [LocLocZ] • For every atomic statement S • S  : States1 States1 • x := a ()=[loc(x) Aa ] • x := &y () • x := *y () • x := y () • *x := y ()

  34. Points-ToAnalysis • Lattice Lpt = • Galois connection

  35. t := &a; y := &b; z := &c; if x> 0; then p:= &y; else p:= &z; *p := t;

  36. /*  */ t := &a; /* {(t, a)}*//* {(t, a)}*/y := &b; /* {(t, a), (y, b) }*/ /* {(t, a), (y, b)}*/z := &c; /* {(t, a), (y, b), (z, c) }*/ if x> 0; then p:= &y;/* {(t, a), (y, b), (z, c), (p, y)}*/ else p:= &z; /* {(t, a), (y, b), (z, c), (p, z)}*/ /* {(t, a), (y, b), (z, c), (p, y), (p, z)}*/ *p := t; /* {(t, a), (y, b), (y, c), (p, y), (p, z), (y, a), (z, a)}*/

  37. Abstract Semantics for PWhile State#= P(Var*  Var*) • For every atomic statement S • x := a () • x := &y () • x := *y () • x := y () • *x := y ()

  38. /*  */ t := &a; /* {(t, a)}*//* {(t, a)}*/y := &b; /* {(t, a), (y, b) }*/ /* {(t, a), (y, b)}*/z := &c; /* {(t, a), (y, b), (z, c) }*/ if x> 0; then p:= &y;/* {(t, a), (y, b), (z, c), (p, y)}*/ else p:= &z; /* {(t, a), (y, b), (z, c), (p, z)}*/ /* {(t, a), (y, b), (z, c), (p, y), (p, z)}*/ *p := t; /* {(t, a), (y, b), (y, c), (p, y), (p, z), (y, a), (z, a)}*/

  39. Flow insensitive points-to-analysisSteengard 1996 • Ignore control flow • One set of points-to per program • Can be represented as a directed graph • Conservative approximation • Accumulate pointers • Can be computed in almost linear time • Union find

  40. t := &a; y := &b; z := &c; if x> 0; then p:= &y; else p:= &z; *p := t;

  41. Precision • We cannot usually have • (CS) = DF on all programs • But can we say something about precision in all programs?

  42. The Join-Over-All-Paths (JOP) • Let paths(v) denote the potentially infinite set paths from start to v (written as sequences of labels) • For a sequence of edges [e1, e2, …, en] definef [e1, e2, …, en]: L  L by composing the effects of basic blocksf [e1, e2, …, en](l) = f(en)(… (f(e2)(f(e1)(l)) …) • JOP[v] = {f[e1, e2, …,en]() [e1, e2, …, en]  paths(v)}

  43. JOP vs. Least Solution • The DF solution obtained by Chaotic iteration satisfies for every l: • JOP[v] DFentry(v) • A function f is additive (distributive) if • f({x| x  X}) = {f(x) |  X} • If every fl is additive (distributive) for all the nodes v • JOP[v]= DFentry(v) • Examples • Maybe garbage • Available expressions • Constant Propagation • Points-to

  44. Conclusion • Chaotic iterations is a powerful technique • Easy to implement • Rather precise • But expensive • More efficient methods exist for structured programs • Abstract interpretation relates runtime semantics and static information • The concrete semantics serves as a tool in designing abstractions • More intuition will be given in the sequel