Eran Yahav

dblp:54/5133 · DBLP profile ↗
← Back
100ranked-venue papers
9as first author
6since 2021 · last 2024
0000-0003-4305-6314ORCID · verified

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

Software engineering, systems software and programming languages · 78 · 9 first-author · 1 since 2021Artificial intelligence and machine learning · 13 · 5 since 2021Theory of computation · 8 · 1 first-authorSystems, architecture and hardware · 7Databases, data management, data science and information retrieval · 2Applied, interdisciplinary, general and emerging computing · 1

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
57 papers
Program analysis · 37% Program synthesis and code generation · 25% Concurrent programming · 17%
Artificial intelligence
14 papers
Deep learning architectures and training · 41% Graph learning · 19% Language models and text generation · 12%
Network and information security
5 papers
Systems and software security · 70% Security and privacy of machine learning · 27% Authentication and access control · 2%
Theoretical computer science
10 papers
Automata and formal languages · 48% Algorithms and data structures · 29% Logic in computer science · 16%

Topics — the 30 heaviest of 124, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Program analysis
static analysis
2.0122020
Neural reverse engineering of stripped binaries using augmented control flow graphs · Proc. ACM Program. Lang. 2020
From typestate verification to interpretable deep models (invited talk abstract) · ISSTA 2019
FirmUp: Precise Static Detection of Common Vulnerabilities in Firmware · ASPLOS 2018
Program analysis
binary analysis
1.552020
Neural reverse engineering of stripped binaries using augmented control flow graphs · Proc. ACM Program. Lang. 2020
Statistical Reconstruction of Class Hierarchies in Binaries · ASPLOS 2018
Similarity of binaries through re-optimization · PLDI 2017
Program synthesis and code generation
programming by example
1.342020
Programming with a read-eval-synth loop · Proc. ACM Program. Lang. 2020
Programming not only by example · ICSE 2018
Synthesis with Abstract Examples · CAV (1) 2017
Systems and software security
vulnerability discovery
1.342020
Adversarial examples for models of code · Proc. ACM Program. Lang. 2020
FirmUp: Precise Static Detection of Common Vulnerabilities in Firmware · ASPLOS 2018
Estimating types in binaries using predictive modeling · POPL 2016
Program analysis › binary analysis
binary code similarity detection
0.932018
FirmUp: Precise Static Detection of Common Vulnerabilities in Firmware · ASPLOS 2018
Similarity of binaries through re-optimization · PLDI 2017
Statistical similarity of binaries · PLDI 2016
Concurrent programming
concurrent data structures
0.842018
Practical concurrent traversals in search trees · PPoPP 2018
Practical concurrent binary search trees via logical ordering · PPoPP 2014
Concurrent libraries with foresight · PLDI 2013
Program synthesis and code generation
code completion
0.732020
Structural Language Models of Code · ICML 2020
Code completion with statistical language models · PLDI 2014
From typestate verification to interpretable deep models (invited talk abstract) · ISSTA 2019
Program analysis
code representation learning
0.722019
code2vec: learning distributed representations of code · Proc. ACM Program. Lang. 2019
From Programs to Interpretable Deep Models and Back · CAV (1) 2018
Program analysis › type-based analysis
typestate analysis
0.742019
From typestate verification to interpretable deep models (invited talk abstract) · ISSTA 2019
Typestate-based semantic code search over partial programs · OOPSLA 2012
Effective typestate verification in the presence of aliasing · ACM Trans. Softw. Eng. Methodol. 2008
Program analysis › static analysis
pointer analysis
0.652019
From typestate verification to interpretable deep models (invited talk abstract) · ISSTA 2019
Static Specification Mining Using Automata-Based Abstractions · IEEE Trans. Software Eng. 2008
On the complexity of partially-flow-sensitive alias analysis · ACM Trans. Program. Lang. Syst. 2008
Software maintenance and evolution
reverse engineering
0.622018
Statistical Reconstruction of Class Hierarchies in Binaries · ASPLOS 2018
Similarity of binaries through re-optimization · PLDI 2017
Machine learning › Deep learning architectures and training
attention mechanism
0.612022
How Attentive are Graph Attention Networks? · ICLR 2022
Machine learning › Graph learning › graph neural network › attention-based graph neural network
graph attention network
0.612022
How Attentive are Graph Attention Networks? · ICLR 2022
Concurrent programming
concurrency bugs
0.552014
Finding rare numerical stability errors in concurrent computations · ISSTA 2013
Scalable and precise dynamic datarace detection for structured parallelism · PLDI 2012
Asynchronous assertions · OOPSLA 2011
Algorithms and data structures › data structure design › search structures
search trees
0.522018
Practical concurrent traversals in search trees · PPoPP 2018
Practical concurrent binary search trees via logical ordering · PPoPP 2014
Concurrent programming › synchronization
synchronization synthesis
0.532015
Automatic scalable atomicity via semantic locking · PPoPP 2015
Automatic semantic locking · PPoPP 2014
Abstraction-guided synthesis of synchronization · POPL 2010
Machine learning › Graph learning
graph neural network
0.512021
On the Bottleneck of Graph Neural Networks and its Practical Implications · ICLR 2021
Machine learning › Deep learning architectures and training
transformer
0.512021
Thinking Like Transformers · ICML 2021
Programming languages and type systems
domain-specific languages
0.512021
Thinking Like Transformers · ICML 2021
Program analysis
program representation
0.422019
A general path-based representation for predicting program properties · PLDI 2018
code2seq: Generating Sequences from Structured Representations of Code · ICLR (Poster) 2019
Natural language and speech › Language models and text generation
code generation
0.412020
Structural Language Models of Code · ICML 2020
Machine learning › Deep learning architectures and training › recurrent neural network
recurrent neural network expressivity
0.412020
A Formal Hierarchy of RNN Architectures · ACL 2020
Security and privacy of machine learning
adversarial example
0.412020
Adversarial examples for models of code · Proc. ACM Program. Lang. 2020
Security and privacy of machine learning › adversarial attack › large language model attack
code model adversarial attack
0.412020
Adversarial examples for models of code · Proc. ACM Program. Lang. 2020
Programming languages and type systems › language implementation
abstract syntax tree
0.412020
Structural Language Models of Code · ICML 2020
Program synthesis and code generation › search-based program synthesis
bottom-up synthesis
0.412020
Programming with a read-eval-synth loop · Proc. ACM Program. Lang. 2020
Program analysis › control flow analysis
control flow graph analysis
0.412020
Neural reverse engineering of stripped binaries using augmented control flow graphs · Proc. ACM Program. Lang. 2020
Program synthesis and code generation › syntax-guided synthesis
sketch-based synthesis
0.412020
Programming with a read-eval-synth loop · Proc. ACM Program. Lang. 2020
Concurrent programming
concurrency control
0.422015
Automatic scalable atomicity via semantic locking · PPoPP 2015
Automatic semantic locking · PPoPP 2014
Machine learning › Deep learning architectures and training › sequence modeling › sequence generation
sequence-to-sequence generation
0.412019
code2seq: Generating Sequences from Structured Representations of Code · ICLR (Poster) 2019

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

static analysis · 1.8LSTM · 1.3statistical language model · 1.0feed-forward computation · 1.0attention · 1.0transformer · 0.9neural conditional probability estimation · 0.9formal hierarchy analysis · 0.9abstract syntax tree decomposition · 0.9graph attention · 0.6expressiveness analysis · 0.6commutativity specification · 0.5neural CRF · 0.4graph neural network · 0.4gradient-based discrete adversarial manipulation · 0.4DAMP · 0.4abstraction · 0.4query learning · 0.4
YearPublicationVenuePosition
2024 Extracting automata from recurrent neural networks using queries and counterexamples (extended version)
Gail Weiss, Yoav Goldberg, Eran Yahav
Mach. Learn.3
2024 Correction to: Extracting automata from recurrent neural networks using queries and counterexamples (extended version)
Gail Weiss, Yoav Goldberg, Eran Yahav
Mach. Learn.3
2023 Towards AI-Driven Software Development: Challenges and Lessons from the Field (Keynote)
abstract
AI is changing the way we develop software. AI is becoming powerful enough to change the nature of interaction between humans and machines and not only to raise the level of abstraction. AI-driven software development is poised to transform the entire software development lifecycle (SDLC). As we move towards AI-driven software development, we must revisit some fundamental assumptions and address the following challenges:
Eran Yahav
ESEC/SIGSOFT FSE1
2022 How Attentive are Graph Attention Networks?
Shaked Brody, Uri Alon 0002, Eran Yahav
ICLR3
2021 On the Bottleneck of Graph Neural Networks and its Practical Implications
Uri Alon 0002, Eran Yahav
ICLR2
2021 Thinking Like Transformers
abstract
What is the computational model behind a Transformer? Where recurrent neural networks have direct parallels in finite state machines, allowing clear discussion and thought around architecture variants or trained models, Transformers have no such familiar parallel. In this paper we aim to change that, proposing a computational model for the transformer-encoder in the form of a programming language. We map the basic components of a transformer-encoder—attention and feed-forward computation—into simple primitives, around which we form a programming language: the Restricted Access Sequence Processing Language (RASP). We show how RASP can be used to program solutions to tasks that could conceivably be learned by a Transformer, and how a Transformer can be trained to mimic a RASP solution. In particular, we provide RASP programs for histograms, sorting, and Dyck-languages. We further use our model to relate their difficulty in terms of the number of required layers and attention heads: analyzing a RASP program implies a maximum number of heads and layers necessary to encode a task in a transformer. Finally, we see how insights gained from our abstraction might be used to explain phenomena seen in recent works.
Gail Weiss, Yoav Goldberg, Eran Yahav
ICML3
2020 A Formal Hierarchy of RNN Architectures
abstract
We develop a formal hierarchy of the expressive capacity of RNN architectures.The hierarchy is based on two formal properties: space complexity, which measures the RNN's memory, and rational recurrence, defined as whether the recurrent update can be described by a weighted finite-state machine.We place several RNN variants within this hierarchy.For example, we prove the LSTM is not rational, which formally separates it from the related QRNN (Bradbury et al., 2016).We also show how these models' expressive capacity is expanded by stacking multiple layers or composing them with different pooling functions.Our results build on the theory of "saturated" RNNs (Merrill, 2019).While formally extending these findings to unsaturated RNNs is left to future work, we hypothesize that the practical learnable capacity of unsaturated RNNs obeys a similar hierarchy.Experimental findings from training unsaturated networks on formal languages support this conjecture.We report updated experiments in Appendix H.
William Merrill, Gail Weiss, Yoav Goldberg, Roy Schwartz 0001, Noah A. Smith, Eran Yahav
ACL6
2020 Structural Language Models of Code
abstract
We address the problem of any-code completion - generating a missing piece of source code in a given program without any restriction on the vocabulary or structure. We introduce a new approach to any-code completion that leverages the strict syntax of programming languages to model a code snippet as a tree - structural language modeling (SLM). SLM estimates the probability of the program’s abstract syntax tree (AST) by decomposing it into a product of conditional probabilities over its nodes. We present a neural model that computes these conditional probabilities by considering all AST paths leading to a target node. Unlike previous techniques that have severely restricted the kinds of expressions that can be generated in this task, our approach can generate arbitrary code in any programming language. Our model significantly outperforms both seq2seq and a variety of structured approaches in generating Java and C# code. Our code, data, and trained models are available at http://github.com/tech-srl/slm-code-generation/. An online demo is available at http://AnyCodeGen.org.
Uri Alon 0002, Roy Sadaka, Omer Levy, Eran Yahav
ICML4
2020 Programming by predicates: a formal model for interactive synthesis
Hila Peleg, Shachar Itzhaky, Sharon Shoham, Eran Yahav
Acta Informatica4
2020 A structural model for contextual code changes
abstract
We address the problem of predicting edit completions based on a learned model that was trained on past edits. Given a code snippet that is partially edited, our goal is to predict a completion of the edit for the rest of the snippet . We refer to this task as the EditCompletion task and present a novel approach for tackling it. The main idea is to directly represent structural edits. This allows us to model the likelihood of the edit itself, rather than learning the likelihood of the edited code. We represent an edit operation as a path in the program’s Abstract Syntax Tree (AST), originating from the source of the edit to the target of the edit. Using this representation, we present a powerful and lightweight neural model for the EditCompletion task. We conduct a thorough evaluation, comparing our approach to a variety of representation and modeling approaches that are driven by multiple strong models such as LSTMs, Transformers, and neural CRFs. Our experiments show that our model achieves a 28% relative gain over state-of-the-art sequential models and 2× higher accuracy than syntactic models that learn to generate the edited code , as opposed to modeling the edits directly. Our code, dataset, and trained models are publicly available at https://github.com/tech-srl/c3po/ .
Shaked Brody, Uri Alon 0002, Eran Yahav
Proc. ACM Program. Lang.3
2020 Neural reverse engineering of stripped binaries using augmented control flow graphs
abstract
We address the problem of reverse engineering of stripped executables, which contain no debug information. This is a challenging problem because of the low amount of syntactic information available in stripped executables, and the diverse assembly code patterns arising from compiler optimizations. We present a novel approach for predicting procedure names in stripped executables. Our approach combines static analysis with neural models. The main idea is to use static analysis to obtain augmented representations of call sites; encode the structure of these call sites using the control-flow graph (CFG) and finally, generate a target name while attending to these call sites. We use our representation to drive graph-based, LSTM-based and Transformer-based architectures. Our evaluation shows that our models produce predictions that are difficult and time consuming for humans, while improving on existing methods by 28% and by 100% over state-of-the-art neural textual models that do not use any static analysis. Code and data for this evaluation are available at https://github.com/tech-srl/Nero.
Yaniv David, Uri Alon 0002, Eran Yahav
Proc. ACM Program. Lang.3
2020 Programming with a read-eval-synth loop
abstract
A frequent programming pattern for small tasks, especially expressions, is to repeatedly evaluate the program on an input as its editing progresses. The Read-Eval-Print Loop (REPL) interaction model has been a successful model for this programming pattern. We present the new notion of Read-Eval-Synth Loop (RESL) that extends REPL by providing in-place synthesis on parts of the expression marked by the user. RESL eases programming by synthesizing parts of a required solution. The underlying synthesizer relies on a partial solution from the programmer and a few examples. RESL hinges on bottom-up synthesis with general predicates and sketching, generalizing programming by example. To make RESL practical, we present a formal framework that extends observational equivalence to non-example specifications. We evaluate RESL by conducting a controlled within-subjects user-study on 19 programmers from 8 companies, where programmers are asked to solve a small but challenging set of competitive programming problems. We find that programmers using RESL solve these problems with far less need to edit the code themselves and by browsing documentation far less. In addition, they are less likely to leave a task unfinished and more likely to be correct.
Hila Peleg, Roi Gabay, Shachar Itzhaky, Eran Yahav
Proc. ACM Program. Lang.4
2020 Adversarial examples for models of code
abstract
Neural models of code have shown impressive results when performing tasks such as predicting method names and identifying certain kinds of bugs. We show that these models are vulnerable to adversarial examples , and introduce a novel approach for attacking trained models of code using adversarial examples. The main idea of our approach is to force a given trained model to make an incorrect prediction, as specified by the adversary, by introducing small perturbations that do not change the program’s semantics, thereby creating an adversarial example. To find such perturbations, we present a new technique for Discrete Adversarial Manipulation of Programs (DAMP). DAMP works by deriving the desired prediction with respect to the model’s inputs , while holding the model weights constant, and following the gradients to slightly modify the input code. We show that our DAMP attack is effective across three neural architectures: code2vec, GGNN, and GNN-FiLM, in both Java and C#. Our evaluations demonstrate that DAMP has up to 89% success rate in changing a prediction to the adversary’s choice (a targeted attack) and a success rate of up to 94% in changing a given prediction to any incorrect prediction (a non-targeted attack). To defend a model against such attacks, we empirically examine a variety of possible defenses and discuss their trade-offs. We show that some of these defenses can dramatically drop the success rate of the attacker, with a minor penalty of 2% relative degradation in accuracy when they are not performing under attack. Our code, data, and trained models are available at https://github.com/tech-srl/adversarial-examples .
Noam Yefet, Uri Alon 0002, Eran Yahav
Proc. ACM Program. Lang.3
2019 code2seq: Generating Sequences from Structured Representations of Code
Uri Alon 0002, Shaked Brody, Omer Levy, Eran Yahav
ICLR (Poster)4
2019 From typestate verification to interpretable deep models (invited talk abstract)
abstract
The paper ``Effective Typestate Verification in the Presence of Aliasing'' was published in the International Symposium on Software Testing and Analysis (ISSTA) 2006 Proceedings, and has now been selected to receive the ISSTA 2019 Retrospective Impact Paper Award. The paper described a scalable framework for verification of typestate properties in real-world Java programs. The paper introduced several techniques that have been used widely in the static analysis of real-world programs. Specifically, it introduced an abstract domain combining access-paths, aliasing information, and typestate that turned out to be simple, powerful, and useful. We review the original paper and show the evolution of the ideas over the years. We show how some of these ideas have evolved into work on machine learning for code completion, and discuss recent general results in machine learning for programming.
Eran Yahav, Stephen J. Fink, Nurit Dor, G. Ramalingam, Emmanuel Geay
ISSTA1
2019 Learning Deterministic Weighted Automata with Queries and Counterexamples
abstract
We present an algorithm for reconstruction of a probabilistic deterministic finite automaton (PDFA) from a given black-box language model, such as a recurrent neural network (RNN). The algorithm is a variant of the exact-learning algorithm L*, adapted to work in a probabilistic setting under noise. The key insight of the adaptation is the use of conditional probabilities when making observations on the model, and the introduction of a variation tolerance when comparing observations. When applied to RNNs, our algorithm returns models with better or equal word error rate (WER) and normalised distributed cumulative gain (NDCG) than achieved by n-gram or weighted finite automata (WFA) approximations of the same networks. The PDFAs capture a richer class of languages than n-grams, and are guaranteed to be stochastic and deterministic -- unlike the WFAs.
Gail Weiss, Yoav Goldberg, Eran Yahav
NeurIPS3
2019 code2vec: learning distributed representations of code
abstract
We present a neural model for representing snippets of code as continuous distributed vectors (``code embeddings''). The main idea is to represent a code snippet as a single fixed-length code vector, which can be used to predict semantic properties of the snippet. To this end, code is first decomposed to a collection of paths in its abstract syntax tree. Then, the network learns the atomic representation of each path while simultaneously learning how to aggregate a set of them. We demonstrate the effectiveness of our approach by using it to predict a method's name from the vector representation of its body. We evaluate our approach by training a model on a dataset of 12M methods. We show that code vectors trained on this dataset can predict method names from files that were unobserved during training. Furthermore, we show that our model learns useful method name vectors that capture semantic similarities, combinations, and analogies. A comparison of our approach to previous techniques over the same dataset shows an improvement of more than 75%, making it the first to successfully predict method names based on a large, cross-project corpus. Our trained model, visualizations and vector similarities are available as an interactive online demo at http://code2vec.org. The code, data and trained models are available at https://github.com/tech-srl/code2vec.
Uri Alon 0002, Meital Zilberstein, Omer Levy, Eran Yahav
Proc. ACM Program. Lang.4
2018 FirmUp: Precise Static Detection of Common Vulnerabilities in Firmware
abstract
We present a static, precise, and scalable technique for finding CVEs (Common Vulnerabilities and Exposures) in stripped firmware images. Our technique is able to efficiently find vulnerabilities in real-world firmware with high accuracy. Given a vulnerable procedure in an executable binary and a firmware image containing multiple stripped binaries, our goal is to detect possible occurrences of the vulnerable procedure in the firmware image. Due to the variety of architectures and unique tool chains used by vendors, as well as the highly customized nature of firmware, identifying procedures in stripped firmware is extremely challenging. Vulnerability detection requires not only pairwise similarity between procedures but also information about the relationships between procedures in the surrounding executable. This observation serves as the foundation for a novel technique that establishes a partial correspondence between procedures in the two binaries. We implemented our technique in a tool called FirmUp and performed an extensive evaluation over 40 million procedures, over 4 different prevalent architectures, crawled from public vendor firmware images. We discovered 373 vulnerabilities affecting publicly available firmware, 147 of them in the latest available firmware version for the device. A thorough comparison of FirmUp to previous methods shows that it accurately and effectively finds vulnerabilities in firmware, while outperforming the detection rate of the state of the art by 45% on average.
Yaniv David, Nimrod Partush, Eran Yahav
ASPLOS3
2018 Statistical Reconstruction of Class Hierarchies in Binaries
abstract
We address a fundamental problem in reverse engineering of object-oriented code: the reconstruction of a program's class hierarchy from its stripped binary. Existing approaches rely heavily on structural information that is not always available, e.g., calls to parent constructors. As a result, these approaches often leave gaps in the hierarchies they construct, or fail to construct them altogether. Our main insight is that behavioral information can be used to infer subclass/superclass relations, supplementing any missing structural information. Thus, we propose the first statistical approach for static reconstruction of class hierarchies based on behavioral similarity. We capture the behavior of each type using a statistical language model (SLM), define a metric for pairwise similarity between types based on the Kullback-Leibler divergence between their SLMs, and lift it to determine the most likely class hierarchy. We implemented our approach in a tool called ROCK and used it to automatically reconstruct the class hierarchies of several real-world stripped C++ binaries. Our results demonstrate that ROCK obtained significantly more accurate class hierarchies than those obtained using structural analysis alone.
Omer Katz, Noam Rinetzky, Eran Yahav
ASPLOS3
2018 From Programs to Interpretable Deep Models and Back
abstract
We demonstrate how deep learning over programs is used to provide (preliminary) augmented programmer intelligence. In the first part, we show how to tackle tasks like code completion, code summarization, and captioning. We describe a general path-based representation of source code that can be used across programming languages and learning tasks, and discuss how this representation enables different learning algorithms. In the second part, we describe techniques for extracting interpretable representations from deep models, shedding light on what has actually been learned in various tasks.
Eran Yahav
CAV (1)1
2018 Extracting Automata from Recurrent Neural Networks Using Queries and Counterexamples
abstract
We present a novel algorithm that uses exact learning and abstraction to extract a deterministic finite automaton describing the state dynamics of a given trained RNN. We do this using Angluin’s \lstar algorithm as a learner and the trained RNN as an oracle. Our technique efficiently extracts accurate automata from trained RNNs, even when the state vectors are large and require fine differentiation.
Gail Weiss, Yoav Goldberg, Eran Yahav
ICML3
2018 Programming not only by example
abstract
Recent years have seen great progress in automated synthesis techniques that can automatically generate code based on some intent expressed by the programmer, but communicating this intent remains a major challenge. When the expressed intent is coarse-grained (for example, restriction on the expected type of an expression), the synthesizer often produces a long list of results for the programmer to choose from, shifting the heavy-lifting to the user. An alternative approach, successfully used in end-user synthesis, is programming by example (PBE), where the user leverages examples to interactively and iteratively refine the intent. However, using only examples is not expressive enough for programmers, who can observe the generated program and refine the intent by directly relating to parts of the generated program.
Hila Peleg, Sharon Shoham, Eran Yahav
ICSE3
2018 A general path-based representation for predicting program properties
abstract
Predicting program properties such as names or expression types has a wide range of applications. It can ease the task of programming, and increase programmer productivity. A major challenge when learning from programs is how to represent programs in a way that facilitates effective learning.
Uri Alon 0002, Meital Zilberstein, Omer Levy, Eran Yahav
PLDI4
2018 Practical concurrent traversals in search trees
abstract
Operations of concurrent objects often employ optimistic concurrency-control schemes that consist of a traversal followed by a validation step. The validation checks if concurrent mutations interfered with the traversal to determine if the operation should proceed or restart. A fundamental challenge is to discover a necessary and sufficient validation check that has to be performed to guarantee correctness.
Dana Drachsler-Cohen, Martin T. Vechev, Eran Yahav
PPoPP3
2018 Generating Tests by Example
Hila Peleg, Dan Rasin, Eran Yahav
VMCAI3
2017 Synthesis with Abstract Examples
Dana Drachsler-Cohen, Sharon Shoham, Eran Yahav
CAV (1)3
2017 Learning Disjunctions of Predicates
abstract
Let $\mathcal F$ be a set of boolean functions. We give an algorithm for learning $\mathcal F_∨:={\vee_f∈Sf | S⊆\mathcal {F}}$ from membership queries. Our algorithm asks at most $|\mathcal {F}|⋅\rm OPT(\mathcal {F}_∨)$ membership queries where $\rm OPT(\mathcal{F}_∨)$ is the minimum worst case number of membership queries for learning $\mathcal{F}_∨$. When $\mathcal{F}$ is a set of halfspaces over a constant dimension space or a set of variable inequalities, our algorithm runs in polynomial time. The problem we address has a practical importance in the field of program synthesis, where the goal is to synthesize a program meeting some requirements. Program synthesis has become popular especially in settings aimed to help end users. In such settings, the requirements are not provided upfront and the synthesizer can only learn them by posing membership queries to the end user. Our work completes such synthesizers with the ability to learn the exact requirements while bounding the number of membership queries.
Nader H. Bshouty, Dana Drachsler-Cohen, Martin T. Vechev, Eran Yahav
COLT4
2017 Similarity of binaries through re-optimization
abstract
We present a scalable approach for establishing similarity between stripped binaries (with no debug information). The main challenge in binary similarity, is to establish similarity even when the code has been compiled using different compilers, with different optimization levels, or targeting different architectures. Overcoming this challenge, while avoiding false positives, is invaluable to the process of reverse engineering and the process of locating vulnerable code.
Yaniv David, Nimrod Partush, Eran Yahav
PLDI3
2017 Synthesis of Forgiving Data Extractors
abstract
We address the problem of synthesizing a robust data-extractor from a family of websites that contain the same kind of information. This problem is common when trying to aggregate information from many web sites, for example, when extracting information for a price-comparison site.
Adi Omari, Sharon Shoham, Eran Yahav
WSDM3
2017 Effective abstractions for verification under relaxed memory models
Andrei-Marian Dan, Yuri Meshman, Martin T. Vechev, Eran Yahav
Comput. Lang. Syst. Struct.4
2016 Cross-supervised synthesis of web-crawlers
abstract
A web-crawler is a program that automatically and systematically tracks the links of a website and extracts information from its pages. Due to the different formats of websites, the crawling scheme for different sites can differ dramatically. Manually customizing a crawler for each specific site is time consuming and error-prone. Furthermore, because sites periodically change their format and presentation, crawling schemes have to be manually updated and adjusted. In this paper, we present a technique for automatic synthesis of web-crawlers from examples. The main idea is to use hand-crafted (possibly partial) crawlers for some websites as the basis for crawling other sites that contain the same kind of information. Technically, we use the data on one site to identify data on another site. We then use the identified data to learn the website structure and synthesize an appropriate extraction scheme. We iterate this process, as synthesized extraction schemes result in additional data to be used for re-learning the website structure. We implemented our approach and automatically synthesized 30 crawlers for websites from nine different categories: books, TVs, conferences, universities, cameras, phones, movies, songs, and hotels.
Adi Omari, Sharon Shoham, Eran Yahav
ICSE3
2016 Lossless Separation of Web Pages into Layout Code and Data
abstract
A modern web page is often served by running layout code on data, producing an HTML document that enhances the data with front/back matters and layout/style operations. In this paper, we consider the opposite task: separating a given web page into a data component and a layout program. This separation has various important applications: page encoding may be significantly more compact (reducing web traffic), data representation is normalized across web designs (facilitating wrapping, retrieval and extraction), and repetitions are diminished (expediting site updates and redesign).
Adi Omari, Benny Kimelfeld, Eran Yahav, Sharon Shoham
KDD3
2016 Statistical similarity of binaries
abstract
We address the problem of finding similar procedures in stripped binaries. We present a new statistical approach for measuring the similarity between two procedures. Our notion of similarity allows us to find similar code even when it has been compiled using different compilers, or has been modified. The main idea is to use similarity by composition: decompose the code into smaller comparable fragments, define semantic similarity between fragments, and use statistical reasoning to lift fragment similarity into similarity between procedures. We have implemented our approach in a tool called Esh, and applied it to find various prominent vulnerabilities across compilers and versions, including Heartbleed, Shellshock and Venom. We show that Esh produces high accuracy results, with few to no false positives -- a crucial factor in the scenario of vulnerability search in stripped binaries.
Yaniv David, Nimrod Partush, Eran Yahav
PLDI3
2016 Estimating types in binaries using predictive modeling
abstract
Reverse engineering is an important tool in mitigating vulnerabilities in binaries. As a lot of software is developed in object-oriented languages, reverse engineering of object-oriented code is of critical importance. One of the major hurdles in reverse engineering binaries compiled from object-oriented code is the use of dynamic dispatch. In the absence of debug information, any dynamic dispatch may seem to jump to many possible targets, posing a significant challenge to a reverse engineer trying to track the program flow. We present a novel technique that allows us to statically determine the likely targets of virtual function calls. Our technique uses object tracelets – statically constructed sequences of operations performed on an object – to capture potential runtime behaviors of the object. Our analysis automatically pre-labels some of the object tracelets by relying on instances where the type of an object is known. The resulting type-labeled tracelets are then used to train a statistical language model (SLM) for each type.We then use the resulting ensemble of SLMs over unlabeled tracelets to generate a ranking of their most likely types, from which we deduce the likely targets of dynamic dispatches.We have implemented our technique and evaluated it over real-world C++ binaries. Our evaluation shows that when there are multiple alternative targets, our approach can drastically reduce the number of targets that have to be considered by a reverse engineer.
Omer Katz, Ran El-Yaniv, Eran Yahav
POPL3
2016 D^3 : Data-Driven Disjunctive Abstraction
Hila Peleg, Sharon Shoham, Eran Yahav
VMCAI3
2016 Symbolic automata for representing big code
Hila Peleg, Sharon Shoham, Eran Yahav, Hongseok Yang
Acta Informatica3
2015 Programming with "Big Code"
Eran Yahav
APLAS1
2015 Pattern-based Synthesis of Synchronization for the C++ Memory Model
abstract
We address the problem of synthesizing efficient and correct synchronization for programs running under the C++ relaxed memory model. Given a finite-state program P and a safety property S such that P satisfies S under a sequentially consistent (SC) memory model, our approach automatically eliminates concurrency errors in P due to the relaxed memory model, by creating a new program P with additional synchronization. Our approach works by automatically exploring the space of programs that can be created from P by adding synchronization operations. To explore this (vast) space, our algorithm: (i) explores bounded error traces to detect memory access patterns that can occur under the C++ memory model but not under SC, and (ii) eliminates these error traces by adding appropriate synchronization operations. We implemented our approach using CDSCHECKER as an oracle for detecting error traces and Z3 to symbolically explore the space of possible solutions. Our tool successfully synthesized synchronization operations for several challenging concurrent algorithms, including a state of the art Read-Copy-Update (RCU) algorithm.
Yuri Meshman, Noam Rinetzky, Eran Yahav
FMCAD3
2015 Automatic scalable atomicity via semantic locking
abstract
In this paper, we consider concurrent programs in which the shared state consists of instances of linearizable ADTs (abstract data types). We present an automated approach to concurrency control that addresses a common need: the need to atomically execute a code fragment, which may contain multiple ADT operations on multiple ADT instances. We present a synthesis algorithm that automatically enforces atomicity of given code fragments (in a client program) by inserting pessimistic synchronization that guarantees atomicity and deadlock-freedom (without using any rollback mechanism). Our algorithm takes a commutativity specification as an extra input. This specification indicates for every pair of ADT operations the conditions under which the operations commute. Our algorithm enables greater parallelism by permitting commuting operations to execute concurrently. We have implemented the synthesis algorithm in a Java compiler, and applied it to several Java programs. Our results show that our approach produces efficient and scalable synchronization.
Guy Golan-Gueta, G. Ramalingam, Shmuel Sagiv, Eran Yahav
PPoPP4
2015 Effective Abstractions for Verification under Relaxed Memory Models
Andrei-Marian Dan, Yuri Meshman, Martin T. Vechev, Eran Yahav
VMCAI4
2014 Verifying atomicity via data independence
abstract
We present a technique for automatically verifying atomicity of composed concurrent operations. The main observation behind our approach is that many composed concurrent operations which occur in practice are data-independent. That is, the control-flow of the composed operation does not depend on specific input values. While verifying data-independence is undecidable in the general case, we provide succint sufficient conditions that can be used to establish a composed operation as data-independent. We show that for the common case of concurrent maps, data-independence reduces the hard problem of verifying linearizability to a verification problem that can be solved efficiently with a bounded number of keys and values. We implemented our approach in a tool called VINE and evaluated it on all composed operations from 57 real-world applications (112 composed operations). We show that many composed operations (49 out of 112) are data-independent, and automatically verify 30 of them as linearizable and the rest 19 as having violations of linearizability that could be repaired and then subsequently automatically verified. Moreover, we show that the remaining 63 operations are not linearizable, thus indicating that data independence does not limit the expressiveness of writing realistic linearizable composed operations.
Ohad Shacham, Eran Yahav, Guy Golan-Gueta, Alex Aiken, Nathan Bronson, Shmuel Sagiv, Martin T. Vechev
ISSTA2
2014 Abstract semantic differencing via speculative correlation
abstract
We address the problem of computing semantic differences between a program and a patched version of the program. Our goal is to obtain a precise characterization of the difference between program versions, or establish their equivalence. We focus on infinite-state numerical programs, and use abstract interpretation to compute an over-approximation of program differences.
Nimrod Partush, Eran Yahav
OOPSLA2
2014 Tracelet-based code search in executables
abstract
We address the problem of code search in executables. Given a function in binary form and a large code base, our goal is to statically find similar functions in the code base. Towards this end, we present a novel technique for computing similarity between functions. Our notion of similarity is based on decomposition of functions into tracelets: continuous, short, partial traces of an execution. To establish tracelet similarity in the face of low-level compiler transformations, we employ a simple rewriting engine. This engine uses constraint solving over alignment constraints and data dependencies to match registers and memory addresses between tracelets, bridging the gap between tracelets that are otherwise similar. We have implemented our approach and applied it to find matches in over a million binary functions. We compare tracelet matching to approaches based on n-grams and graphlets and show that tracelet matching obtains dramatically better precision and recall.
Yaniv David, Eran Yahav
PLDI2
2014 Code completion with statistical language models
abstract
We address the problem of synthesizing code completions for programs using APIs. Given a program with holes, we synthesize completions for holes with the most likely sequences of method calls.
Veselin Raychev, Martin T. Vechev, Eran Yahav
PLDI3
2014 Practical concurrent binary search trees via logical ordering
abstract
We present practical, concurrent binary search tree (BST) algorithms that explicitly maintain logical ordering information in the data structure, permitting clean separation from its physical tree layout. We capture logical ordering using intervals, with the property that an item belongs to the tree if and only if the item is an endpoint of some interval. We are thus able to construct efficient, synchronization-free and intuitive lookup operations. We present (i) a concurrent non-balanced BST with a lock-free lookup, and (ii) a concurrent AVL tree with a lock-free lookup that requires no synchronization with any mutating operations, including balancing operations. Our algorithms apply on-time deletion; that is, every request for removal of a node, results in its immediate removal from the tree. This new feature did not exist in previous concurrent internal tree algorithms.
Dana Drachsler-Cohen, Martin T. Vechev, Eran Yahav
PPoPP3
2014 Automatic semantic locking
abstract
In this paper, we consider concurrent programs in which the shared state consists of instances of linearizable ADTs (abstract data types). We develop a novel automated approach to concurrency control that addresses a common need: the need to atomically execute a code fragment, which may contain multiple ADT operations on multiple ADT instances. In our approach, each ADT implements ADT-specific semantic locking operations that serve to exploit the semantics of ADT operations. We develop a synthesis algorithm that automatically inserts calls to these locking operations in a set of given code fragments (in a client program) to ensure that these code fragments execute atomically without deadlocks, and without rollbacks.
Guy Golan-Gueta, G. Ramalingam, Shmuel Sagiv, Eran Yahav
PPoPP4
2014 Synthesis of Memory Fences via Refinement Propagation
Yuri Meshman, Andrei-Marian Dan, Martin T. Vechev, Eran Yahav
SAS4
2013 Finding rare numerical stability errors in concurrent computations
abstract
A numerical algorithm is called stable if an error, in all possible executions of the algorithm, does not exceed a predefined bound. Introduction of concurrency to numerical algorithms results in a significant increase in the number of possible computations of the same result, due to different possible interleavings of concurrent threads. This can lead to instability of previously stable algorithms, since rounding can result in a larger error than expected for some interleavings. Such errors can be very rare, since the particular combination of rounding can occur in only a small fraction of interleavings. In this paper, we apply the cross-entropy method -- a generic approach to rare event simulation and combinatorial optimization -- to detect rare numerical instability in concurrent programs. The cross-entropy method iteratively samples a small number of executions and adjusts the probability distribution of possible scheduling decisions to increase the probability of encountering an error in a subsequent iteration. We demonstrate the effectiveness of our approach on implementations of several numerical algorithms with concurrency and rounding by truncation of intermediate computations. We describe several abstraction algorithms on top of the implementation of the cross-entropy method and show that with abstraction, our algorithms successfully find rare errors in programs with hundreds of threads. In fact, some of our abstractions lead to a state space whose size does not depend on the number of threads at all. We compare our approach to several existing testing algorithms and argue that its performance is superior to other techniques.
Hana Chockler, Karine Even-Mendoza, Eran Yahav
ISSTA3
2013 Concurrent libraries with foresight
abstract
Linearizable libraries provide operations that appear to execute atomically. Clients, however, may need to execute a sequence of operations (a composite operation) atomically. We consider the problem of extending a linearizable library to support arbitrary atomic composite operations by clients. We introduce a novel approach in which the concurrent library ensures atomicity of composite operations by exploiting information (foresight) provided by its clients. We use a correctness condition, based on a notion of dynamic right-movers, that guarantees that composite operations execute atomically without deadlocks, and without using rollbacks.
Guy Golan-Gueta, G. Ramalingam, Shmuel Sagiv, Eran Yahav
PLDI4
2013 Predicate Abstraction for Relaxed Memory Models
Andrei-Marian Dan, Yuri Meshman, Martin T. Vechev, Eran Yahav
SAS4
2013 Abstract Semantic Differencing for Numerical Programs
Nimrod Partush, Eran Yahav
SAS2
2013 Symbolic Automata for Static Specification Mining
Hila Peleg, Sharon Shoham, Eran Yahav, Hongseok Yang
SAS3
2013 Automatic Synthesis of Deterministic Concurrency
Veselin Raychev, Martin T. Vechev, Eran Yahav
SAS3
2013 Abstraction-Guided Synthesis
Eran Yahav
VMCAI1
2013 Abstraction-guided synthesis of synchronization
Martin T. Vechev, Eran Yahav, Greta Yorsh
Int. J. Softw. Tools Technol. Transf.2
2012 Typestate-based semantic code search over partial programs
abstract
We present a novel code search approach for answering queries focused on API-usage with code showing how the API should be used. To construct a search index, we develop new techniques for statically mining and consolidating temporal API specifications from code snippets. In contrast to existing semantic-based techniques, our approach handles partial programs in the form of code snippets. Handling snippets allows us to consume code from various sources such as parts of open source projects, educational resources (e.g. tutorials), and expert code sites. To handle code snippets, our approach (i) extracts a possibly partial temporal specification from each snippet using a relatively precise static analysis tracking a generalized notion of typestate, and (ii) consolidates the partial temporal specifications, combining consistent partial information to yield consolidated temporal specifications, each of which captures a full(er) usage scenario.
Alon Mishne, Sharon Shoham, Eran Yahav
OOPSLA3
2012 Dynamic synthesis for relaxed memory models
abstract
Modern architectures implement relaxed memory models which may reorder memory operations or execute them non-atomically. Special instructions called memory fences are provided, allowing control of this behavior.
Nayden Nedev, Nedyalko Prisadnikov, Martin T. Vechev, Eran Yahav
PLDI5
2012 Scalable and precise dynamic datarace detection for structured parallelism
abstract
Existing dynamic race detectors suffer from at least one of the following three limitations:
Raghavan Raman, Jisheng Zhao, Vivek Sarkar, Martin T. Vechev, Eran Yahav
PLDI5
2012 Efficient data race detection for async-finish parallelism
Raghavan Raman, Jisheng Zhao, Vivek Sarkar, Martin T. Vechev, Eran Yahav
Formal Methods Syst. Des.5
2011 Asynchronous assertions
abstract
Assertions are a familiar and widely used bug detection technique. Traditional assertion checking, however, is performed synchronously, imposing its full cost on the runtime of the program. As a result, many useful kinds of checks, such as data structure invariants and heap analyses, are impractical because they lead to extreme slowdowns. We present a solution that decouples assertion evaluation from program execution: assertions are checked asynchronously by separate checking threads while the program continues to execute. Our technique guarantees that asynchronous evaluation always produces the same result as synchronous evaluation, even if the program concurrently modifies the program state. The checking threads evaluate each assertion on a consistent snapshot of the program state as it existed at the moment the assertion started.
Edward Aftandilian, Samuel Z. Guyer, Martin T. Vechev, Eran Yahav
OOPSLA4
2011 Automatic fine-grain locking using shape properties
abstract
We present a technique for automatically adding fine-grain locking to an abstract data type that is implemented using a dynamic forest -i.e., the data structures may be mutated, even to the point of violating forestness temporarily during the execution of a method of the ADT. Our automatic technique is based on Domination Locking, a novel locking protocol. Domination locking is designed specifically for software concurrency control, and in particular is designed for object-oriented software with destructive pointer updates. Domination locking is a strict generalization of existing locking protocols for dynamically changing graphs. We show our technique can successfully add fine-grain locking to libraries where manually performing locking is extremely challenging. We show that automatic fine-grain locking is more efficient than coarse-grain locking, and obtains similar performance to hand-crafted fine-grain locking.
Guy Golan-Gueta, Nathan Bronson, Alex Aiken, G. Ramalingam, Shmuel Sagiv, Eran Yahav
OOPSLA6
2011 Sprint: speculative prefetching of remote data
abstract
Remote data access latency is a significant performance bottleneck in many modern programs that use remote databases and web services. We present Sprint - a run-time system for optimizing such programs by prefetching and caching data from remote sources in parallel to the execution of the original program. Sprint separates the concerns of exposing potentially-independent data accesses from the mechanism for executing them efficiently in parallel or in a batch. In contrast to prior work, Sprint can efficiently prefetch data in the presence of irregular or input-dependent access patterns, while preserving the semantics of the original program.
Arun Raman, Greta Yorsh, Martin T. Vechev, Eran Yahav
OOPSLA4
2011 Testing atomicity of composed concurrent operations
abstract
We address the problem of testing atomicity of composed concurrent operations. Concurrent libraries help programmers exploit parallel hardware by providing scalable concurrent operations with the illusion that each operation is executed atomically. However, client code often needs to compose atomic operations in such a way that the resulting composite operation is also atomic while preserving scalability. We present a novel technique for testing the atomicity of client code composing scalable concurrent operations. The challenge in testing this kind of client code is that a bug may occur very rarely and only on a particular interleaving with a specific thread configuration. Our technique is based on modular testing of client code in the presence of an adversarial environment; we use commutativity specifications to drastically reduce the number of executions explored to detect a bug. We implemented our approach in a tool called COLT, and evaluated its effectiveness on a range of 51 real-world concurrent Java programs. Using COLT, we found 56 atomicity violations in Apache Tomcat, Cassandra, MyFaces Trinidad, and other applications.
Ohad Shacham, Nathan Bronson, Alex Aiken, Shmuel Sagiv, Martin T. Vechev, Eran Yahav
OOPSLA6
2011 Partial-coherence abstractions for relaxed memory models
abstract
We present an approach for automatic verification and fence inference in concurrent programs running under relaxed memory models. Verification under relaxed memory models is a hard problem. Given a finite state program and a safety specification, verifying that the program satisfies the specification under a sufficiently relaxed memory model is undecidable. For stronger models, the problem is decidable but has non-primitive recursive complexity.
Michael Kuperstein 0001, Martin T. Vechev, Eran Yahav
PLDI3
2011 QVM: An Efficient Runtime for Detecting Defects in Deployed Systems
abstract
Coping with software defects that occur in the post-deployment stage is a challenging problem: bugs may occur only when the system uses a specific configuration and only under certain usage scenarios. Nevertheless, halting production systems until the bug is tracked and fixed is often impossible. Thus, developers have to try to reproduce the bug in laboratory conditions. Often, the reproduction of the bug takes most of the debugging effort. In this paper we suggest an approach to address this problem by using a specialized runtime environment called Quality Virtual Machine (QVM). QVM efficiently detects defects by continuously monitoring the execution of the application in a production setting. QVM enables the efficient checking of violations of user-specified correctness properties, that is, typestate safety properties, Java assertions, and heap properties pertaining to ownership. QVM is markedly different from existing techniques for continuous monitoring by using a novel overhead manager which enforces a user-specified overhead budget for quality checks. Existing tools for error detection in the field usually disrupt the operation of the deployed system. QVM, on the other hand, provides a balanced trade-off between the cost of the monitoring process and the maintenance of sufficient accuracy for detecting defects. Specifically, the overhead cost of using QVM instead of a standard JVM, is low enough to be acceptable in production environments. We implemented QVM on top of IBM’s J9 Java Virtual Machine and used it to detect and fix various errors in real-world applications.
Matthew Arnold, Martin T. Vechev, Eran Yahav
ACM Trans. Softw. Eng. Methodol.3
2010 Automatic inference of memory fences
Michael Kuperstein 0001, Martin T. Vechev, Eran Yahav
FMCAD3
2010 PHALANX: parallel checking of expressive heap assertions
abstract
Unrestricted use of heap pointers makes software systems difficult to understand and to debug. To address this challenge, we developed PHALANX -- a practical framework for dynamically checking expressive heap properties such as ownership, sharing and reachability. PHALANX uses novel parallel algorithms to efficiently check a wide range of heap properties utilizing the available cores.
Martin T. Vechev, Eran Yahav, Greta Yorsh
ISMM2
2010 Verifying linearizability with hindsight
abstract
We present a proof of safety and linearizability of a highly-concurrent optimistic set algorithm. The key step in our proof is the Hindsight Lemma, which allows a thread to infer the existence of a global state in which its operation can be linearized based on limited local atomic observations about the shared state. The Hindsight Lemma allows us to avoid one of the most complex and non-intuitive steps in reasoning about highly concurrent algorithms: considering the linearization point of an operation to be in a different thread than the one executing it.
Peter W. O'Hearn, Noam Rinetzky, Martin T. Vechev, Eran Yahav, Greta Yorsh
PODC4
2010 Abstraction-guided synthesis of synchronization
abstract
We present a novel framework for automatic inference of efficient synchronization in concurrent programs, a task known to be difficult and error-prone when done manually.
Martin T. Vechev, Eran Yahav, Greta Yorsh
POPL2
2010 Efficient Data Race Detection for Async-Finish Parallelism
Raghavan Raman, Jisheng Zhao, Vivek Sarkar, Martin T. Vechev, Eran Yahav
RV5
2010 Automatic Verification of Determinism for Structured Parallel Programs
Martin T. Vechev, Eran Yahav, Raghavan Raman, Vivek Sarkar
SAS2
2010 Verifying safety properties of concurrent heap-manipulating programs
abstract
We provide a parametric framework for verifying safety properties of concurrent heap-manipulating programs. The framework combines thread-scheduling information with information about the shape of the heap. This leads to verification algorithms that are more precise than existing techniques. The framework also provides a precise shape-analysis algorithm for concurrent programs. In contrast to most existing verification techniques, we do not put a bound on the number of allocated objects. The framework produces interesting results even when analyzing programs with an unbounded number of threads. The framework is applied to successfully verify the following properties of a concurrent program: —Concurrent manipulation of linked-list based ADT preserves the ADT datatype invariant. —The program does not perform inconsistent updates due to interference. —The program does not reach a deadlock. —The program does not produce runtime errors due to illegal thread interactions. We also found bugs in erroneous programs violating such properties. A prototype of our framework has been implemented and applied to small, but interesting, example programs.
Eran Yahav, Shmuel Sagiv
ACM Trans. Program. Lang. Syst.1
2009 Chameleon: adaptive selection of collections
abstract
Languages such as Java and C#, as well as scripting languages like Python, and Ruby, make extensive use of Collection classes. A collection implementation represents a fixed choice in the dimensions of operation time, space utilization, and synchronization. Using the collection in a manner not consistent with this fixed choice can cause significant performance degradation. In this paper, we present CHAMELEON, a low-overhead automatic tool that assists the programmer in choosing the appropriate collection implementation for her application. During program execution, CHAMELEON computes elaborate trace and heap-based metrics on collection behavior. These metrics are consumed on-thefly by a rules engine which outputs a list of suggested collection adaptation strategies. The tool can apply these corrective strategies automatically or present them to the programmer. We have implemented CHAMELEON on top of a IBM's J9 production JVM, and evaluated it over a small set of benchmarks. We show that for some applications, using CHAMELEON leads to a significant improvement of the memory footprint of the application.
Ohad Shacham, Martin T. Vechev, Eran Yahav
PLDI3
2009 Inferring Synchronization under Limited Observability
Martin T. Vechev, Eran Yahav, Greta Yorsh
TACAS2
2008 Verifying dereference safety via expanding-scope analysis
abstract
This paper addresses the challenging problem of verifying the safety of pointer dereferences in real Java programs. We provide an automatic approach to this problem based on a sound interprocedural analysis. We present a staged expanding-scope algorithm for interprocedural abstract interpretation, which invokes sound analysis with partial programs of increasing scope. This algorithm achieves many benefits typical of whole-program interprocedural analysis, but scales to large programs by limiting analysis to small program fragments. To address cases where the static analysis of program fragments fails to prove safety, the analysis also suggests possible annotations which, if a user accepts, ensure the desired properties. Experimental evaluation on a number of Java programs shows that we are able to verify 90% of all dereferences soundly and automatically, and further reduce the number of remaining dereferences using non-nullness annotations.
Alexey Loginov, Eran Yahav, Satish Chandra 0001, Stephen J. Fink, Noam Rinetzky, Mangala Gowri Nanda
ISSTA2
2008 The CLOSER: automating resource management in java
abstract
While automatic garbage collection has relieved programmers from manual memory management in Java-like languages, managing resources remains a considerable burden and a source of performance problems. In this paper, we present a novel technique for automatic resource management based on static approximation of resource lifetimes. Our source-to-source transformation tool, CLOSER, automatically transforms program code to guarantee that resources are properly disposed and handles arbitrary resource usage patterns. CLOSER generates code for directly disposing any resource whose lifetime can be statically determined; when this is not possible, CLOSER inserts conditional disposal code based on interest-reference counts that identify when the resource can be safely disposed. The programmer is only required to identify which types should be treated as resources, and what method to invoke to dispose each such resource. We successfully applied CLOSER on a moderate-sized graphics application that requires complex reasoning for resource management.
Isil Dillig, Thomas Dillig, Eran Yahav, Satish Chandra 0001
ISMM3
2008 QVM: an efficient runtime for detecting defects in deployed systems
abstract
Coping with software defects that occur in the post-deployment stage is a challenging problem: bugs may occur only when the system uses a specific configuration and only under certain usage scenarios. Nevertheless, halting production systems until the bug is tracked and fixed is often impossible. Thus, developers have to try to reproduce the bug in laboratory conditions. Often the reproduction of the bug consists of the lion share of the debugging effort.
Matthew Arnold, Martin T. Vechev, Eran Yahav
OOPSLA3
2008 Deriving linearizable fine-grained concurrent objects
abstract
Practical and efficient algorithms for concurrent data structures are difficult to construct and modify. Algorithms in the literature are often optimized for a specific setting, making it hard to separate the algorithmic insights from implementation details. The goal of this work is to systematically construct algorithms for a concurrent data structure starting from its sequential implementation. Towards that goal, we follow a construction process that combines manual steps corresponding to high-level insights with automatic exploration of implementation details. To assist us in this process, we built a new tool called Paraglider. The tool quickly explores large spaces of algorithms and uses bounded model checking to check linearizability of algorithms.
Martin T. Vechev, Eran Yahav
PLDI2
2008 Generating precise and concise procedure summaries
abstract
We present a framework for generating procedure summaries that are (a) precise - applying the summary in a given context yields the same result as re-analyzing the procedure in that context, and(b) concise - the summary exploits the commonalitiesin the ways the procedure manipulates abstract values, and does not contain superfluous context information.
Greta Yorsh, Eran Yahav, Satish Chandra 0001
POPL2
2008 On the complexity of partially-flow-sensitive alias analysis
abstract
We introduce the notion of apartially-flow-sensitive analysis based on the number of read and write operations that are guaranteed to be analyzed in a sequential manner. We study the complexity of partially-flow-sensitive alias analysis and show that precise alias analysis with a very limited flow-sensitivity is as hard as precise flow-sensitive alias analysis, both when dynamic memory allocation is allowed, as well as in the absence of dynamic memory allocation.
Noam Rinetzky, G. Ramalingam, Shmuel Sagiv, Eran Yahav
ACM Trans. Program. Lang. Syst.4
2008 Effective typestate verification in the presence of aliasing
abstract
This article addresses the challenge of sound typestate verification, with acceptable precision, for real-world Java programs. We present a novel framework for verification of typestate properties, including several new techniques to precisely treat aliases without undue performance costs. In particular, we present a flow-sensitive, context-sensitive, integrated verifier that utilizes a parametric abstract domain combining typestate and aliasing information. To scale to real programs without compromising precision, we present a staged verification system in which faster verifiers run as early stages which reduce the workload for later, more precise, stages. We have evaluated our framework on a number of real Java programs, checking correct API usage for various Java standard libraries. The results show that our approach scales to hundreds of thousands of lines of code, and verifies correctness for 93% of the potential points of failure.
Stephen J. Fink, Eran Yahav, Nurit Dor, G. Ramalingam, Emmanuel Geay
ACM Trans. Softw. Eng. Methodol.2
2008 Static Specification Mining Using Automata-Based Abstractions
abstract
We present a novel approach to client-side mining of temporal API specifications based on static analysis. Specifically, we present an interprocedural analysis over a combined domain that abstracts both aliasing and event sequences for individual objects. The analysis uses a new family of automata-based abstractions to represent unbounded event sequences, designed to disambiguate distinct usage patterns and merge similar usage patterns. Additionally, our approach includes an algorithm that summarizes abstract traces based on automata clusters, and effectively rules out spurious behaviors. We show experimental results mining specifications from a number of Java clients and APIs. The results indicate that effective static analysis for client-side mining requires fairly precise treatment of aliasing and abstract event sequences. Based on the results, we conclude that static client-side specification mining shows promise as a complement or alternative to dynamic approaches.
Sharon Shoham, Eran Yahav, Stephen J. Fink, Marco Pistoia
IEEE Trans. Software Eng.2
2007 Comparison Under Abstraction for Verifying Linearizability
Daphna Amit, Noam Rinetzky, Thomas W. Reps, Shmuel Sagiv, Eran Yahav
CAV5
2007 Modular Shape Analysis for Dynamically Encapsulated Programs
Noam Rinetzky, Arnd Poetzsch-Heffter, G. Ramalingam, Shmuel Sagiv, Eran Yahav
ESOP5
2007 When Role Models Have Flaws: Static Validation of Enterprise Security Policies
abstract
Modern multiuser software systems have adopted role-based access control (RBAC) for authorization management. This paper presents a formal model for RBAC policy validation and a static-analysis model for RBAC systems that can be used to (i) identify the roles required by users to execute an enterprise application, (ii) detect potential inconsistencies caused by principal-delegation policies, which are used to override a user's role assignment, (Hi) report if the roles assigned to a user by a given policy are redundant or insufficient, and (iv) report vulnerabilities that can result from unchecked intra-component accesses. The algorithms described in this paper have been implemented as part of IBM's enterprise security policy evaluator (ESPE) tool. Experimental results show that the tool found numerous policy flaws, including ten previously unknown flaws from two production-level applications, with no false-positive reports.
Marco Pistoia, Stephen J. Fink, Robert J. Flynn, Eran Yahav
ICSE4
2007 Static specification mining using automata-based abstractions
abstract
We present a novel approach to client-side mining of temporal API specifications based on static analysis. Specifically, we present an interprocedural analysis over a combined domain that abstracts both aliasing and event sequences for individual objects. The analysis uses a new family of automata-based abstractions to represent unbounded event sequences, designed to disambiguate distinct usage patterns and merge similar usage patterns. Additionally, our approach includes an algorithm that summarizes abstract traces based on automata clusters, and effectively rules out spurious behaviors.
Sharon Shoham, Eran Yahav, Stephen J. Fink, Marco Pistoia
ISSTA2
2007 CGCExplorer: a semi-automated search procedure for provably correct concurrent collectors
abstract
Concurrent garbage collectors are notoriously hard to design, implement, and verify. We present a framework for the automatic exploration of a space of concurrent mark-and-sweep collectors. In our framework, the designer specifies a set of "building blocks" from which algorithms can be constructed. These blocks reflect the designer's insights about the coordination between the collector and the mutator. Given a set of building blocks, our framework automatically explores a space of algorithms, using model checking with abstraction to verify algorithms in the space.
Martin T. Vechev, Eran Yahav, David F. Bacon, Noam Rinetzky
PLDI2
2006 Effective typestate verification in the presence of aliasing
abstract
This paper addresses the challenge of sound typestate verification, with acceptable precision, for real-world Java programs. We present a novel framework for verification of typestate properties, including several new techniques to precisely treat aliases without undue performance costs. In particular, we present a flowsensitive, context-sensitive, integrated verifier that utilizes a parametric abstract domain combining typestate and aliasing information.To scale to real programs without compromising precision, we present a staged verification system in which faster verifiers run as early stages which reduce the workload for later, more precise, stages.We have evaluated our framework on a number of real Java programs, checking correct API usage for various Java standard libraries. The results show that our approach scales to hundreds of thousands of lines of code, and verifies correctness for 93% of the potential points of failure.
Stephen J. Fink, Eran Yahav, Nurit Dor, G. Ramalingam, Emmanuel Geay
ISSTA2
2006 Continuous code-quality assurance with SAFE
abstract
This paper presents the design of SAFE (Scalable and Flexible Error Detection), a static analysis tool targeting lightweight program verification and bug finding for Java. The tool utilizes two types of analysis: a simple "structural" checker based on pattern-matching, and an interprocedural flow-sensitive dataflow solver which integrates typestate checking and alias analysis. We describe how the tool integrates into a team development platform for analysis of batch builds, and user interface support built on the Eclipse platform.
Emmanuel Geay, Eran Yahav, Stephen J. Fink
PEPM2
2006 Correctness-preserving derivation of concurrent garbage collection algorithms
abstract
Constructing correct concurrent garbage collection algorithms is notoriously hard. Numerous such algorithms have been proposed, implemented, and deployed - and yet the relationship among them in terms of speed and precision is poorly understood, and the validation of one algorithm does not carry over to others.As programs with low latency requirements written in garbagecollected languages become part of society's mission-critical infrastructure, it is imperative that we raise the level of confidence in the correctness of the underlying system, and that we understand the trade-offs inherent in our algorithmic choice.In this paper we present correctness-preserving transformations that can be applied to an initial abstract concurrent garbage collection algorithm which is simpler, more precise, and easier to prove correct than algorithms used in practice--but also more expensive and with less concurrency. We then show how both pre-existing and new algorithms can be synthesized from the abstract algorithm by a series of our transformations. We relate the algorithms formally using a new definition of precision, and informally with respect to overhead and concurrency.This provides many insights about the nature of concurrent collection, allows the direct synthesis of new and useful algorithms, reduces the burden of proof to a single simple algorithm, and lays the groundwork for the automated synthesis of correct concurrent collectors.
Martin T. Vechev, Eran Yahav, David F. Bacon
PLDI2
2005 High-level real-time programming in Java
abstract
Real-time systems have reached a level of complexity beyond the scaling capability of the low-level or restricted languages traditionally used for real-time programming.While Metronome garbage collection has made it practical to use Java to implement real-time systems, many challenges remain for the construction of complex real-time systems, some specific to the use of Java and others simply due to the change in scale of such systems.The goal of our current research is the creation of a comprehensive Java-based programming environment and methodology for the creation of complex real-time systems. Our goals include construction of a provably correct real-time garbage collector capable of providing worst case latencies of 100 μs, capable of scaling from sensor nodes up to large multiprocessors; specialized programming constructs that retain the safety and simplicity of Java, and yet provide sub-microsecond latencies; the extension of Java's "write once, run anywhere" principle from functional correctness to timing behavior; on-line analysis and visualization that aids in the understanding of complex behaviors; and a principled probabilistic analysis methodology for bounding the behavior of the resulting systems.While much remains to be done, this paper describes the progress we have made towards these goals.
David F. Bacon, Perry Cheng, David Grove, Michael Hind, V. T. Rajan, Eran Yahav, Matthias Hauswirth, Christoph M. Kirsch, Daniel Spoonhower, Martin T. Vechev
EMSOFT6
2005 Interprocedural Shape Analysis for Cutpoint-Free Programs
Noam Rinetzky, Shmuel Sagiv, Eran Yahav
SAS3
2005 Predicate Abstraction and Canonical Abstraction for Singly-Linked Lists
Roman Manevich, Eran Yahav, G. Ramalingam, Shmuel Sagiv
VMCAI2
2005 Typestate verification: Abstraction techniques and complexity results
John Field, Deepak Goyal, G. Ramalingam, Eran Yahav
Sci. Comput. Program.4
2005 Establishing local temporal heap safety properties with applications to compile-time memory management
Ran Shaham, Eran Yahav, Elliot K. Kolodner, Shmuel Sagiv
Sci. Comput. Program.2
2004 Verifying safety properties using separation and heterogeneous abstractions
abstract
In this paper, we show how separation (decomposing a verification problem into a collection of verification subproblems) can be used to improve the efficiency and precision of verification of safety properties. We present a simple language for specifying separation strategies for decomposing a single verification problem into a set of subproblems. (The strategy specification is distinct from the safety property specification and is specified separately.) We present a general framework of heterogeneous abstraction that allows different parts of the heap to be abstracted using different degrees of precision at different points during the analysis. We show how the goals of separation (i.e., more efficient verification) can be realized by first using a separation strategy to transform (instrument) a verification problem instance (consisting of a safety property specification and an input program), and by then utilizing heterogeneous abstraction during the verification of the transformed verification problem.
Eran Yahav, G. Ramalingam
PLDI1
2003 Verifying Temporal Heap Properties Specified via Evolution Logic
Eran Yahav, Thomas W. Reps, Shmuel Sagiv, Reinhard Wilhelm
ESOP1
2003 Typestate Verification: Abstraction Techniques and Complexity Results
John Field, Deepak Goyal, G. Ramalingam, Eran Yahav
SAS4
2003 Establishing Local Temporal Heap Safety Properties with Applications to Compile-Time Memory Management
Ran Shaham, Eran Yahav, Elliot K. Kolodner, Shmuel Sagiv
SAS2
2001 Verifying safety properties of concurrent Java programs using 3-valued logic
abstract
We provide a parametric framework for verifying safety properties of concurrent Java programs. The framework combines thread-scheduling information with information about the shape of the heap. This leads to error-detection algorithms that are more precise than existing techniques. The framework also provides the most precise shape-analysis algorithm for concurrent programs. In contrast to existing verification techniques, we do not put a bound on the number of allocated objects. The framework even produces interesting results when analyzing Java programs with an unbounded number of threads. The framework is applied to successfully verify the following properties of a concurrent program: •Concurrent manipulation of linked-list based ADT preserves the ADT datatype invariant [19]. •The program does not perform inconsistent updates due to interference. •The program does not reach a deadlock. •The program does not produce run-time errors due to illegal thread interactions. We also find bugs in erroneous versions of such implementations. A prototype of our framework has been implemented.
Eran Yahav
POPL1