Manuvir Das

dblp:d/ManuvirDas · DBLP profile ↗
← Back
17ranked-venue papers
8as first author
0since 2021 · last 2006
—ORCID · none

Domains — the database's venue-derived domains; a paper can count in several

Software engineering, systems software and programming languages · 17 · 8 first-authorTheory of computation · 1 · 1 first-author

Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.

Software engineering, system software, and programming languages
8 papers
Program analysis · 74% Requirements engineering and software design · 9% Program verification · 8%

Topics — the 13 heaviest of 14, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program analysis
static analysis
0.232006
Modular checking for buffer overflows in the large · ICSE 2006
PSE: explaining program failures via postmortem static analysis · SIGSOFT FSE 2004
Software validation via scalable path-sensitive value flow analysis · ISSTA 2004
Program analysis › static analysis › vulnerability detection
buffer overflow detection
0.112006
Modular checking for buffer overflows in the large · ICSE 2006
Program analysis
dynamic analysis
0.112006
Perracotta: mining temporal API rules from imperfect traces · ICSE 2006
Requirements engineering and software design
formal specification
0.112006
Formal Specifications on Industrial-Strength Code-From Myth to Reality · CAV 2006
Program analysis › static analysis
pointer analysis
0.122000
Scalable context-sensitive flow analysis using instantiation constraints · PLDI 2000
Unification-based pointer analysis with directional assignments · PLDI 2000
Debugging and program repair
fault localization
0.012004
PSE: explaining program failures via postmortem static analysis · SIGSOFT FSE 2004
Program analysis › data flow analysis
value-flow analysis
0.012004
Software validation via scalable path-sensitive value flow analysis · ISSTA 2004
Program analysis › data flow analysis
path-sensitive analysis
0.012002
ESP: Path-Sensitive Program Verification in Polynomial Time · PLDI 2002
Program analysis › data flow analysis
context-sensitive dataflow analysis
0.012000
Scalable context-sensitive flow analysis using instantiation constraints · PLDI 2000
Program analysis › static analysis › pointer analysis
flow-insensitive points-to analysis
0.012000
Unification-based pointer analysis with directional assignments · PLDI 2000
Program analysis › static analysis › constraint-based analysis
unification-based analysis
0.012000
Unification-based pointer analysis with directional assignments · PLDI 2000
Program verification
annotation inference
0.012006
Modular checking for buffer overflows in the large · ICSE 2006
Programming languages and type systems › type inference
polymorphic type inference
0.012000
Scalable context-sensitive flow analysis using instantiation constraints · PLDI 2000

Methods — techniques the papers use, named apart from their topics

trace analysis · 0.1slicing · 0.1modular checking · 0.1approximate inference · 0.1symbolic evaluation · 0.0bit-vectorization · 0.0alias analysis · 0.0temporal safety property checking · 0.0unification · 0.0subtyping · 0.0
YearPublicationVenuePosition
2006 Formal Specifications on Industrial-Strength Code-From Myth to Reality
Manuvir Das
CAV1
2006 Modular checking for buffer overflows in the large
abstract
We describe an ongoing project, the deployment of a modular checker to statically find and prevent every buffer overflow in future versions of a Microsoft product. Lightweight annotations specify requirements for safely using each buffer, and functions are checked individually to ensure they obey these requirements and do not overflow. Our focus is on the incremental deployment of this technology: by layering the annotation language, using aggressive inference techniques, and slicing warnings by checker confidence, teams must pay only part of the cost of annotating a program to achieve part of the benefit, which provides incentive for further annotation. To date over 400,000 annotations have been added to specify buffer usage in the source code for this product, of which over 150,000 were automatically inferred, and over 3,000 potential buffer overflows have been found and fixed.
Brian Hackett, Manuvir Das, Zhe Yang 0001
ICSE2
2006 Perracotta: mining temporal API rules from imperfect traces
abstract
Dynamic inference techniques have been demonstrated to provide useful support for various software engineering tasks including bug finding, test suite evaluation and improvement, and specification generation. To date, however, dynamic inference has only been used effectively on small programs under controlled conditions. In this paper, we identify reasons why scaling dynamic inference techniques has proven difficult, and introduce solutions that enable a dynamic inference technique to scale to large programs and work effectively with the imperfect traces typically available in industrial scenarios. We describe our approximate inference algorithm, present and evaluate heuristics for winnowing the large number of inferred properties to a manageable set of interesting properties, and report on experiments using inferred properties. We evaluate our techniques on JBoss and the Windows kernel. Our tool is able to infer many of the properties checked by the Static Driver Verifier and leads us to discover a previously unknown bug in Windows.
Jinlin Yang, David Evans 0001, Deepali Bhardwaj, Thirumalesh Bhat, Manuvir Das
ICSE5
2006 Unleashing the Power of Static Analysis
Manuvir Das
SAS1
2006 Path-Sensitive Dataflow Analysis with Iterative Refinement
Dinakar Dhurjati, Manuvir Das
SAS2
2005 PASTE at Microsoft
Manuvir Das
PASTE1
2005 Symbolic path simulation in path-sensitive dataflow analysis
abstract
Symbolic path simulation is becoming an increasingly important component in many static analysis tasks. The emergence of inter-procedural path-sensitive dataflow algorithms has both raised the demands and posed new challenges for effective techniques in path feasibility analysis.This paper develops a general-purpose path simulator and applies it to support path-sensitive dataflow analysis. The core component of the path simulator is a simulation engine that supports a wide variety of programming language features. This simulation engine can be "wrapped" with an interface layer to support a given client application.As a concrete case study, we discuss the experiences gained in integrating the path simulator with ESP, a software validation tool for C/C++ programs. We apply ESP to validate a future version of Windows against critical security properties. Our results show that the global path simulation mechanism is both critical in improving precision and scalable enough to be of practical use.
Hari Hampapuram, Manuvir Das
PASTE3
2004 Software validation via scalable path-sensitive value flow analysis
abstract
In this paper, we present a new algorithm for tracking the flow of values through a program. Our algorithm represents a substantial improvement over the state of the art. Previously described value flow analyses that are control-flow sensitive do not scale well, nor do they eliminate value flow information from infeasible execution paths (i.e., they are path-insensitive). Our algorithm scales to large programs, and it is path-sensitive.The efficiency of our algorithm arises from three insights: The value flow problem can be "bit-vectorized" by tracking the flow of one value at a time; dataflow facts from different execution paths with the same value flow information can be merged; and information about complex aliasing that affects value flow can be plugged in from a different analysis.We have incorporated our analysis in ESP, a software validation tool. We have used ESP to validate the Windows operating system kernel (a million lines of code) against an important security property. This experience suggests that our algorithm scales to large programs, and is accurate enough to trace the flow of values in real code.
Nurit Dor, Stephen Adams 0001, Manuvir Das, Zhe Yang 0001
ISSTA3
2004 PSE: explaining program failures via postmortem static analysis
abstract
In this paper, we describe PSE (Postmortem Symbolic Evaluation), a static analysis algorithm that can be used by programmers to diagnose software failures. The algorithm requires minimal information about a failure, namely its kind (e.g. NULL dereference), and its location in the program's source code. It produces a set of execution traces along which the program can be driven to the given failure.
Roman Manevich, Manu Sridharan, Stephen Adams 0001, Manuvir Das, Zhe Yang 0001
SIGSOFT FSE4
2002 ESP: Path-Sensitive Program Verification in Polynomial Time
abstract
In this paper, we present a new algorithm for partial program verification that runs in polynomial time and space. We are interested in checking that a program satisfies a given temporal safety property. Our insight is that by accurately modeling only those branches in a program for which the property-related behavior differs along the arms of the branch, we can design an algorithm that is accurate enough to verify the program with respect to the given property, without paying the potentially exponential cost of full path-sensitive analysis.We have implemented this "property simulation" algorithm as part of a partial verification tool called ESP. We present the results of applying ESP to the problem of verifying the file I/O behavior of a version of the GNU C compiler (gcc, 140,000 LOC). We are able to prove that all of the 646 calls to .fprintf in the source code of gcc are guaranteed to print to valid, open files. Our results show that property simulation scales to large programs and is accurate enough to verify meaningful properties.
Manuvir Das, Sorin Lerner, Mark Seigle
PLDI1
2002 Speeding Up Dataflow Analysis Using Flow-Insensitive Pointer Analysis
Stephen Adams 0001, Thomas Ball 0001, Manuvir Das, Sorin Lerner, Sriram K. Rajamani, Mark Seigle, Westley Weimer
SAS3
2001 Dynamic points-to sets: a comparison with static analyses and potential applications in program understanding and optimization
abstract
In this paper, we compare the behavior of pointers in C programs, as approximated by static pointer analysis algorithms, with the actual behavior of pointers when these programs are run. In order to perform this comparison, we have implemented several well known pointer analysis algorithms, and we have built an instrumentation infrastructure for tracking pointer values during program execution.
Markus Mock, Manuvir Das, Craig Chambers, Susan J. Eggers
PASTE2
2001 Estimating the Impact of Scalable Pointer Analysis on Optimization
Manuvir Das, Ben Liblit, Manuel Fähndrich, Jakob Rehof
SAS1
2000 Static Analysis of Large Programs: Some Experiences (Abstract of Invited Talk)
abstract
Our research group at Microsoft has spent some effort over the last few years attempting to apply static analysis methods to large application programs (over a million lines of code). In the first part of the talk, I will share some of the insights we have gained along the way. The first insight is that the static analysis method of interest must scale to large programs. It must scale in terms of performance, both running time and memory requirements. The interesting complexity metric is average-case behaviour. The analysis must also scale in terms of the quality of information produced. This metric is hard to measure, and depends on the problem to be solved. The second insight is that large commercial applications differ from the benchmark programs typically used in the literature in many ways beyond sheer size: For instance, they routinely circumvent the type system, they make use of every conceivable language feature, they use large shared libraries, they contain some very large automatically generated functions, they define functions with large numbers of call sites, and they include many indirect call sites. All of these characteristics make analysis hard. In particular, they make the implementation of a scalable analysis an exercise in careful engineering.
Manuvir Das
PEPM1
2000 Unification-based pointer analysis with directional assignments
abstract
This paper describes a new algorithm for flow and context insensitive pointer analysis of C programs. Our studies show that the most common use of pointers in C programs is in passing the addresses of composite objects or updateable values as arguments to procedures. Therefore, we have designed a low-cost algorithm that handles this common case accurately. In terms of both precision and running time, this algorithm lies between Steensgaard's algorithm, which treats assignments bi-directionally using unification, and Andersen's algorithm, which treats assignments directionally using subtyping. Our “one level flow” algorithm uses a restricted form of subtyping to avoid unification of symbols at the top levels of pointer chains in the points-to graph, while using unification elsewhere in the graph. The method scales easily to large programs. For instance, we are able to analyze a 1.4 MLOC (million lines of code) program in two minutes, using less than 200MB of memory. At the same time, the precision of our algorithm is very close to that of Andersen's algorithm. On all of the integer benchmark programs from SPEC95, the one level flow algorithm and Andersen's algorithm produce either identical or essentially identical points-to information. Therefore, we claim that our algorithm provides a method for obtaining precise flow-insensitive points-to information for large C programs.
Manuvir Das
PLDI1
2000 Scalable context-sensitive flow analysis using instantiation constraints
abstract
This paper shows that a type graph (obtained via polymorphic type inference) harbors explicit directional flow paths between functions. These flow paths arise from the instantiations of polymorphic types and correspond to call-return sequences in first-order programs. We show that flow information can be computed efficiently while considering only paths with well matched call-return sequences, even in the higher-order case. Furthermore, we present a practical algorithm for inferring type instantiation graphs and provide empirical evidence to the scalability of the presented techniques by applying them in the context of points-to analysis for C programs.
Manuel Fähndrich, Jakob Rehof, Manuvir Das
PLDI3
1995 Semantic Foundations of Binding Time Analysis for Imperative Programs
abstract
This paper examines the role of dependence analysis in defimng bindingtime analyses (BTAs) for imperative programs and in establishing that such BTAs are safe.In particular, we are concerned with characterizing safety conditions under which a program specialize that uses the results of a BTA is guaranteed to terminate.Our safety conditions are formalized wa semantic characterizations of the statements in a program along two dimensions: srartc versus dynamic, and finite versus injinife.This permits us to give a semantic definition of "static-infinite computation", a concept that has not been previously formalized.To illustrate the concepts, we present three different BTAs for an imperative language, we show that two of them me safe in the absence of "static-infinite computations".In developing these notions, we make use of program represenrarion graphs, which are a program representation similar to the dependence graphs used in parallelizing and vectorizing compilers.In operational terms, our BTAs are related to the operation ofprogrrrm slicing, which can be implemented using such graphs.
Manuvir Das, Thomas W. Reps, Pascal Van Hentenryck
PEPM1