Duc-Hiep Chu

dblp:29/10300 · DBLP profile ↗
← Back
14ranked-venue papers
7as first author
0since 2021 · last 2020
—ORCID · none

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

Software engineering, systems software and programming languages · 9 · 4 first-authorTheory of computation · 3 · 1 first-authorSecurity and privacy · 2Applied, interdisciplinary, general and emerging computing · 2 · 2 first-authorSystems, architecture and hardware · 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
6 papers
Debugging and program repair · 42% Program analysis · 29% Program synthesis and code generation · 17%
Theoretical computer science
4 papers
Automated reasoning and model checking · 100%
Network and information security
2 papers
Blockchain and cryptocurrency security · 54% Cryptographic primitives and cryptanalysis · 26% Web and mobile security · 20%

Topics — the 17 heaviest of 18, each with the papers that count most for it

TopicWeightPapersLastEvidence papers
Automated reasoning and model checking › constraint solving
string constraint solving
1.032020
Inter-theory dependency analysis for SMT string solvers · Proc. ACM Program. Lang. 2020
Model Counting for Recursively-Defined Strings · CAV (2) 2017
Progressive Reasoning over Recursively-Defined Strings · CAV (1) 2016
Debugging and program repair
automated program repair
0.622017
S3: syntax- and semantic-guided repair synthesis via programming by examples · ESEC/SIGSOFT FSE 2017
JFIX: semantics-based repair of Java programs via symbolic PathFinder · ISSTA 2017
Debugging and program repair › automated program repair
semantics-based program repair
0.622017
S3: syntax- and semantic-guided repair synthesis via programming by examples · ESEC/SIGSOFT FSE 2017
JFIX: semantics-based repair of Java programs via symbolic PathFinder · ISSTA 2017
Program analysis › constraint solving
string constraint solving
0.522017
Model Counting for Recursively-Defined Strings · CAV (2) 2017
Progressive Reasoning over Recursively-Defined Strings · CAV (1) 2016
Automated reasoning and model checking
satisfiability modulo theories
0.412020
Inter-theory dependency analysis for SMT string solvers · Proc. ACM Program. Lang. 2020
Program analysis › constraint solving
model counting
0.312017
Model Counting for Recursively-Defined Strings · CAV (2) 2017
Program synthesis and code generation
programming by example
0.312017
S3: syntax- and semantic-guided repair synthesis via programming by examples · ESEC/SIGSOFT FSE 2017
Program synthesis and code generation
syntax-guided synthesis
0.312017
S3: syntax- and semantic-guided repair synthesis via programming by examples · ESEC/SIGSOFT FSE 2017
Debugging and program repair › automated program repair
synthesis repair
0.312017
S3: syntax- and semantic-guided repair synthesis via programming by examples · ESEC/SIGSOFT FSE 2017
Cryptographic primitives and cryptanalysis
security analysis
0.212016
Making Smart Contracts Smarter · CCS 2016
Blockchain and cryptocurrency security
smart contract
0.212016
Making Smart Contracts Smarter · CCS 2016
Program verification
data structure verification
0.212015
Automatic induction proofs of data-structures in imperative programs · PLDI 2015
Program verification › theorem proving
inductive theorem proving
0.212015
Automatic induction proofs of data-structures in imperative programs · PLDI 2015
Blockchain and cryptocurrency security › smart contract security
vulnerability detection
0.212014
S3: A Symbolic String Solver for Vulnerability Detection in Web Applications · CCS 2014
Web and mobile security › web security
web application vulnerability detection
0.212014
S3: A Symbolic String Solver for Vulnerability Detection in Web Applications · CCS 2014
Program analysis
symbolic execution
0.212014
S3: A Symbolic String Solver for Vulnerability Detection in Web Applications · CCS 2014
Blockchain and cryptocurrency security
blockchain protocols
0.112016
Making Smart Contracts Smarter · CCS 2016

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

symbolic execution · 0.6dependency analysis · 0.4SMT solving · 0.4constraint solving · 0.4ranking features · 0.3program synthesis · 0.3enumerative search · 0.3program analysis · 0.2induction hypothesis · 0.2fold/unfold · 0.2regular expressions · 0.2regular expression · 0.2
YearPublicationVenuePosition
2020 Inter-theory dependency analysis for SMT string solvers
abstract
Solvers in the framework of Satisfiability Modulo Theories (SMT) have been widely successful in practice. Recently there has been an increasing interest in solvers for string constraints to address security issues in web programming, for example. To be practically useful, the solvers need to support an expressive constraint language over unbounded strings, and in particular, over string lengths. Satisfiability checking for these formulas, especially in the SMT context, is very hard; it is generally undecidable for a rich fragment. In this paper, we propose a form of dependency analysis for a rich fragment of string constraints including high-level operations such as length, contains to deal with their inter-theory interaction so as to solve them more efficiently. We implement our dependency analysis in the string theory of the Z3 solver to obtain a new one, called S3N. Finally, we demonstrate the superior performance of S3N over state-of-the-art string solvers such as Z3str3, CVC4, S3P, and Z3 on several large industrial-strength benchmarks.
Minh-Thai Trinh, Duc-Hiep Chu, Joxan Jaffar
Proc. ACM Program. Lang.2
2017 Model Counting for Recursively-Defined Strings
Minh-Thai Trinh, Duc-Hiep Chu, Joxan Jaffar
CAV (2)2
2017 JFIX: semantics-based repair of Java programs via symbolic PathFinder
abstract
Recently there has been a proliferation of automated program repair (APR) techniques, targeting various programming languages. Such techniques can be generally classified into two families: syntactic- and semantics-based. Semantics-based APR, on which we focus, typically uses symbolic execution to infer semantic constraints and then program synthesis to construct repairs conforming to them. While syntactic-based APR techniques have been shown success- ful on bugs in real-world programs written in both C and Java, semantics-based APR techniques mostly target C programs. This leaves empirical comparisons of the APR families not fully explored, and developers without a Java-based semantics APR technique. We present JFix, a semantics-based APR framework that targets Java, and an associated Eclipse plugin. JFix is implemented atop Symbolic PathFinder, a well-known symbolic execution engine for Java programs. It extends one particular APR technique (Angelix), and is designed to be sufficiently generic to support a variety of such techniques. We demonstrate that semantics-based APR can indeed efficiently and effectively repair a variety of classes of bugs in large real-world Java programs. This supports our claim that the framework can both support developers seeking semantics-based repair of bugs in Java programs, as well as enable larger scale empirical studies comparing syntactic- and semantics-based APR targeting Java. The demonstration of our tool is available via the project website at: https://xuanbachle.github.io/semanticsrepair/
Bach Le 0001, Duc-Hiep Chu, David Lo 0001, Claire Le Goues, Willem Visser
ISSTA2
2017 S3: syntax- and semantic-guided repair synthesis via programming by examples
abstract
A notable class of techniques for automatic program repair is known as semantics-based. Such techniques, e.g., Angelix, infer semantic specifications via symbolic execution, and then use program synthesis to construct new code that satisfies those inferred specifications. However, the obtained specifications are naturally incomplete, leaving the synthesis engine with a difficult task of synthesizing a general solution from a sparse space of many possible solutions that are consistent with the provided specifications but that do not necessarily generalize. We present S3, a new repair synthesis engine that leverages programming-by-examples methodology to synthesize high-quality bug repairs. The novelty in S3 that allows it to tackle the sparse search space to create more general repairs is three-fold: (1) A systematic way to customize and constrain the syntactic search space via a domain-specific language, (2) An efficient enumeration- based search strategy over the constrained search space, and (3) A number of ranking features based on measures of the syntactic and semantic distances between candidate solutions and the original buggy program. We compare S3’s repair effectiveness with state-of-the-art synthesis engines Angelix, Enumerative, and CVC4. S3 can successfully and correctly fix at least three times more bugs than the best baseline on datasets of 52 bugs in small programs, and 100 bugs in real-world large programs.
Bach Le 0001, Duc-Hiep Chu, David Lo 0001, Claire Le Goues, Willem Visser
ESEC/SIGSOFT FSE2
2016 Progressive Reasoning over Recursively-Defined Strings
Minh-Thai Trinh, Duc-Hiep Chu, Joxan Jaffar
CAV (1)2
2016 Making Smart Contracts Smarter
abstract
Cryptocurrencies record transactions in a decentralized data structure called a blockchain. Two of the most popular cryptocurrencies, Bitcoin and Ethereum, support the feature to encode rules or scripts for processing transactions. This feature has evolved to give practical shape to the ideas of smart contracts, or full-fledged programs that are run on blockchains. Recently, Ethereum's smart contract system has seen steady adoption, supporting tens of thousands of contracts, holding millions dollars worth of virtual coins.
Loi Luu, Duc-Hiep Chu, Hrishi Olickel, Prateek Saxena, Aquinas Hobor
CCS2
2016 Symbolic execution for memory consumption analysis
abstract
With the advances in both hardware and software of embedded systems in the past few years, dynamic memory allocation can now be safely used in embedded software. As a result, the need to develop methods to avoid heap overflow errors in safety-critical embedded systems has increased. Resource analysis of imperative programs with non-regular loop patterns and signed integers, to support both memory allocation and deallocation, has long been an open problem. Existing methods can generate symbolic bounds that are parametric w.r.t. the program inputs; such bounds, however, are imprecise in the presence of non-regular loop patterns. In this paper, we present a worst-case memory consumption analysis, based upon the framework of symbolic execution. Our assumption is that loops (and recursions) of to-be-analyzed programs are indeed bounded. We then can exhaustively unroll loops and the memory consumption of each iteration can be precisely computed and summarized for aggregation. Because of path-sensitivity, our algorithm generates more precise bounds. Importantly, we demonstrate that by introducing a new concept of reuse, symbolic execution scales to a set of realistic benchmark programs.
Duc-Hiep Chu, Joxan Jaffar, Rasool Maghareh
LCTES1
2016 Precise Cache Timing Analysis via Symbolic Execution
abstract
We present a framework for WCET analysis of programs with emphasis on cache micro-architecture. Such an analysis is challenging primarily because of the timing model of a dynamic nature, that is, the timing of a basic block is heavily dependent on the context in which it is executed. At its core, our algorithm is based on symbolic execution, and an analysis is obtained by locating the "longest" symbolic execution path. Clearly a challenge is the intractable number of paths in the symbolic execution tree. Traditionally this challenge is met by performing some form of abstraction in the path generation process but this leads to a loss of path-sensitivity and thus precision in the analysis. The key feature of our algorithm is the ability for reuse. This is critical for maintaining a high-level of path-sensitivity, which in turn produces significantly increased accuracy. In other words, reuse allows scalability in path-sensitive exploration. Finally, we present an experimental evaluation on well known benchmarks in order to show two things: that systematic path-sensitivity in fact brings significant accuracy gains, and that the algorithm still scales well.
Duc-Hiep Chu, Joxan Jaffar, Rasool Maghareh
RTAS1
2015 Automatic induction proofs of data-structures in imperative programs
abstract
We consider the problem of automated reasoning about dynamically manipulated data structures. Essential properties are encoded as predicates whose definitions are formalized via user-defined recursive rules. Traditionally, proving relationships between such properties is limited to the unfold-and-match (U+M) paradigm which employs systematic transformation steps of folding/unfolding the rules. A proof, using U+M, succeeds when we find a sequence of transformations that produces a final formula which is obviously provable by simply matching terms. Our contribution here is the addition of the fundamental principle of induction to this automated process. We first show that some proof obligations that are dynamically generated in the process can be used as induction hypotheses in the future, and then we show how to use these hypotheses in an induction step which generates a new proof obligation aside from those obtained by using the fold/unfold operations. While the adding of induction is an obvious need in general, no automated method has managed to include this in a systematic and general way. The main reason for this is the problem of avoiding circular reasoning. We overcome this with a novel checking condition. In summary, our contribution is a proof method which – beyond U+M – performs automatic formula re-writing by treating previously encountered obligations in each proof path as possible induction hypotheses. In the practical evaluation part of this paper, we show how the commonly used technique of using unproven lemmas can be avoided, using realistic benchmarks. This not only removes the current burden of coming up with the appropriate lemmas, but also significantly boosts up the verification process, since lemma applications, coupled with unfolding, often induce a large search space. In the end, our method can automatically reason about a new class of formulas arising from practical program verification.
Duc-Hiep Chu, Joxan Jaffar, Minh-Thai Trinh
PLDI1
2014 S3: A Symbolic String Solver for Vulnerability Detection in Web Applications
abstract
Motivated by the vulnerability analysis of web programs which work on string inputs, we present S3, a new symbolic string solver. Our solver employs a new algorithm for a constraint language that is expressive enough for widespread applicability. Specifically, our language covers all the main string operations, such as those in JavaScript. The algorithm first makes use of a symbolic representation so that membership in a set defined by a regular expression can be encoded as string equations. Secondly, there is a constraint-based generation of instances from these symbolic expressions so that the total number of instances can be limited. We evaluate S3 on a well-known set of practical benchmarks, demonstrating both its robustness (more definitive answers) and its efficiency (about 20 times faster) against the state-of-the-art.
Minh-Thai Trinh, Duc-Hiep Chu, Joxan Jaffar
CCS2
2014 Lazy Symbolic Execution for Enhanced Learning
Duc-Hiep Chu, Joxan Jaffar, Vijayaraghavan Murali
RV1
2013 Path-sensitive resource analysis compliant with assertions
abstract
We consider the problem of bounding the worst-case resource usage of programs, where assertions about valid program executions may be enforced at selected program points. It is folklore that to be precise, path-sensitivity (up to loops) is needed. This entails unrolling loops in the manner of symbolic simulation. To be tractable, however, the treatment of the individual loop iterations must be greedy in the sense once analysis is finished on one iteration, we cannot backtrack to change it. We show that under these conditions, enforcing assertions produces unsound results. The fundamental reason is that complying with assertions requires the analysis to be fully sensitive (also with loops) wrt. the assertion variables. We then present an algorithm where the treatment of each loop is separated in two phases. The first phase uses a greedy strategy in unrolling the loop. This phase explores what is conceptually a symbolic execution tree, which is of enormous size, while eliminates infeasible paths and dominated paths that guaranteed not to contribute to the worst case bound. A compact representation is produced at the end of this phase. Finally, the second phase attacks the remaining problem, to determine the worst-case path in the simplified tree, excluding all paths that violate the assertions from bound calculation. Scalability, in both phases, is achieved via an adaptation of a dynamic programming algorithm.
Duc-Hiep Chu, Joxan Jaffar
EMSOFT1
2012 A Complete Method for Symmetry Reduction in Safety Verification
Duc-Hiep Chu, Joxan Jaffar
CAV1
2011 Symbolic simulation on complicated loops for WCET path analysis
abstract
We address the Worst-Case Execution Time (WCET) Path Analysis problem for bounded programs, formalized as discovering a tight upper bound of a resource variable. A key challenge is posed by complicated loops whose iterations exhibit non-uniform behavior. We adopt a brute-force strategy by simply unrolling them, and show how to make this scalable while preserving accuracy.
Duc-Hiep Chu, Joxan Jaffar
EMSOFT1