Preface |
|
vii | |
Contributions |
|
xvii | |
|
|
xix | |
|
|
1 | (22) |
|
|
2 | (2) |
|
|
4 | (2) |
|
|
6 | (1) |
|
|
7 | (4) |
|
|
7 | (1) |
|
Combining Value and Content Abstraction |
|
|
8 | (1) |
|
Combining Pointer and Value-Range Analysis |
|
|
9 | (2) |
|
|
11 | (4) |
|
|
15 | (3) |
|
|
16 | (1) |
|
|
16 | (1) |
|
Refining Points-to Analysis |
|
|
17 | (1) |
|
|
17 | (1) |
|
|
18 | (5) |
|
|
18 | (1) |
|
|
19 | (1) |
|
|
20 | (1) |
|
|
20 | (3) |
|
|
23 | (24) |
|
|
23 | (5) |
|
|
28 | (1) |
|
|
28 | (4) |
|
|
32 | (5) |
|
|
37 | (5) |
|
|
42 | (5) |
|
Part I Abstracting Soundly |
|
|
|
|
47 | (24) |
|
|
48 | (3) |
|
|
51 | (5) |
|
The Points-to Abstract Domain |
|
|
54 | (1) |
|
|
55 | (1) |
|
|
56 | (15) |
|
The Domain of Convex Polyhedra |
|
|
56 | (3) |
|
|
59 | (3) |
|
|
62 | (3) |
|
Combining the Polyhedral and Multiplicity Domains |
|
|
65 | (3) |
|
|
68 | (3) |
|
Taming Casting and Wrapping |
|
|
71 | (18) |
|
Modelling the Wrapping of Integers |
|
|
72 | (2) |
|
A Language Featuring Finite Integer Arithmatic |
|
|
74 | (2) |
|
|
74 | (1) |
|
|
75 | (1) |
|
Polyhedral Analysis of Finite Integers |
|
|
76 | (1) |
|
Implict Wrapping of Polyhedral Variables |
|
|
77 | (1) |
|
Explict Wrapping of Polyhedral Variables |
|
|
78 | (5) |
|
Wrapping Variables with a Finite Range |
|
|
78 | (2) |
|
Wrapping Variables with Infinite Ranges |
|
|
80 | (1) |
|
Wrapping Several Variables |
|
|
80 | (2) |
|
An Algorithm for Explicit Wrapping |
|
|
82 | (1) |
|
An Abstract Semantics for Sub C |
|
|
83 | (3) |
|
|
86 | (3) |
|
|
87 | (2) |
|
Overlapping Memory Accesses and Pointers |
|
|
89 | (22) |
|
Memory as a Set of Fields |
|
|
89 | (4) |
|
|
90 | (3) |
|
|
93 | (7) |
|
|
99 | (1) |
|
Mixing Values and Pointers |
|
|
100 | (6) |
|
|
106 | (5) |
|
On Choosing an Abstraction Framework |
|
|
108 | (3) |
|
|
111 | (16) |
|
Expressions and Simple Assignments |
|
|
116 | (2) |
|
|
118 | (3) |
|
Casting, &-Operations, and Dynamic Memory |
|
|
121 | (2) |
|
Inferring Fields Automatically |
|
|
123 | (4) |
|
Part II Ensuring Efficiency |
|
|
|
|
127 | (20) |
|
Operations on Inequalities |
|
|
129 | (2) |
|
Entailment between single Inequalities |
|
|
130 | (1) |
|
Operations on Sets of Inequalities |
|
|
131 | (16) |
|
|
131 | (1) |
|
|
132 | (2) |
|
|
134 | (10) |
|
Linear Programming and Planar Polyhedra |
|
|
144 | (1) |
|
Widening Planar Polyhedra |
|
|
145 | (2) |
|
|
147 | (18) |
|
Principles of the TVPI Domain |
|
|
148 | (4) |
|
|
150 | (1) |
|
|
150 | (1) |
|
|
151 | (1) |
|
Reduced Product between Bounds and Inequalities |
|
|
152 | (11) |
|
Redundancy Removal in the Reduced Product |
|
|
155 | (1) |
|
|
156 | (4) |
|
Approximating General Inequalities |
|
|
160 | (1) |
|
Linear Programming in the TVPI Domain |
|
|
160 | (1) |
|
Widening of TVPI Polyhedra |
|
|
161 | (2) |
|
|
163 | (2) |
|
|
165 | (20) |
|
|
166 | (2) |
|
|
166 | (1) |
|
Limiting the Growth of Coefficients |
|
|
167 | (1) |
|
Harvsey's Integral Hull Algorithm |
|
|
168 | (9) |
|
Calculating Cuts between two Inequalities |
|
|
169 | (3) |
|
Integer Hull in the Reduced Product Domain |
|
|
172 | (5) |
|
Planar Z-Polyhedra and Closure |
|
|
177 | (5) |
|
Possibel Implementations of a Z-TVPI Domain |
|
|
177 | (2) |
|
Tightening Bounds across Projections |
|
|
179 | (1) |
|
Discussions and Implementation |
|
|
180 | (2) |
|
|
182 | (3) |
|
Interfacing Analysis and Numeric Domain |
|
|
185 | (12) |
|
Separating Interval from Relational Information |
|
|
185 | (2) |
|
Inferring Relevant Fields and Addresses |
|
|
187 | (5) |
|
|
189 | (1) |
|
|
190 | (2) |
|
Applying Widening in Fixpoint Calculations |
|
|
192 | (5) |
|
Part III Improving Precision |
|
|
|
|
197 | (20) |
|
Manipulating Implicitly Terminated Strings |
|
|
198 | (11) |
|
Analysing the String Loop |
|
|
199 | (4) |
|
Calculating a Fixpoint of the Loop |
|
|
203 | (6) |
|
Prerequisites for String Buffer Analysis |
|
|
209 | (1) |
|
Incorporating String Buffer Analysis |
|
|
209 | (4) |
|
Extending the Abstraction Relation |
|
|
212 | (1) |
|
|
213 | (4) |
|
|
217 | (18) |
|
An Introduction to Widening/Narrowing |
|
|
217 | (3) |
|
The Limitations of Narrowing |
|
|
218 | (2) |
|
Improving Widening and Removing Narrowing |
|
|
220 | (1) |
|
Revisiting the Analysis of String Buffers |
|
|
220 | (6) |
|
Applying the Widening/Narrowing Approach |
|
|
222 | (1) |
|
The Rationale behing Landmarks |
|
|
222 | (3) |
|
Creating Landmarks for Widening |
|
|
225 | (1) |
|
Using Landmarks in Widening |
|
|
225 | (1) |
|
|
226 | (1) |
|
Using Landmarks at a Widening Point |
|
|
227 | (2) |
|
Extrapolation Operator for Polyhedra |
|
|
229 | (2) |
|
|
231 | (4) |
|
Combinging Points-to and Numeric Analoyses |
|
|
235 | (24) |
|
Boolean Flags in the Numeric Domain |
|
|
237 | (4) |
|
Boolean Flags and Unbounded Polyhedra |
|
|
238 | (1) |
|
Integrality of the Solution Space |
|
|
239 | (1) |
|
Applications of Boolean Flags |
|
|
240 | (1) |
|
Incorporating Boolean Flags into Points-to Sets |
|
|
241 | (9) |
|
Revising Access Trees and Access Functons |
|
|
241 | (3) |
|
The Semantics of Expressions and Assignments |
|
|
244 | (2) |
|
Conditionals and Points-to Flags |
|
|
246 | (3) |
|
Incorporating Boolean Flags into the Abstraction Relation |
|
|
249 | (1) |
|
|
250 | (9) |
|
Inferring Points-to Flags on Demand |
|
|
251 | (1) |
|
Populating the Address Map on Demand |
|
|
251 | (2) |
|
Index-Sensitive Memory Access Functions |
|
|
253 | (2) |
|
|
255 | (4) |
|
|
259 | (18) |
|
Technical Overview of the Analyser |
|
|
260 | (2) |
|
Managing Abstract Domains |
|
|
262 | (2) |
|
|
264 | (7) |
|
Scheduling of Code without Loops |
|
|
265 | (2) |
|
Scheduling in the Presence of Loops and Function Calls |
|
|
267 | (1) |
|
Deriving an Iteration Strategy from Topology |
|
|
268 | (1) |
|
|
269 | (2) |
|
Limitations of the String Buffer Analysis |
|
|
271 | (5) |
|
Weaknesses of Tracking First NUL Positions |
|
|
271 | (1) |
|
Handling Symbolic NUL Positions |
|
|
272 | (4) |
|
Proposed Future Refinements |
|
|
276 | (1) |
|
|
277 | (4) |
A Core C Example |
|
281 | (4) |
References |
|
285 | (12) |
Index |
|
297 | |