VLDB 2026 Research / reviewers in the wild / expert
Gogul Balakrishnan
dblp:86/5106
· DBLP profile ↗
25ranked-venue papers
11as first author
0since 2021 · last 2020
0009-0008-5459-2263ORCID · corroborated
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 23 · 10 first-authorTheory of computation · 4 · 2 first-authorArtificial intelligence and machine learning · 1Applied, interdisciplinary, general and emerging computing · 1 · 1 first-author
Expertise — from the expertise taxonomy: the topics of the expert's papers under the CCF categories. A weight counts papers with recency: 1 for a paper about the topic, 0.3 when the topic is its context, halved every five years.
| Software engineering, system software, and programming languages
8 papers |
Program analysis · 50% Software testing · 18% Empirical software engineering · 12% | |
| Artificial intelligence
1 paper |
Language models and text generation · 100% |
Topics — the 22 heaviest of 24, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Program analysis
static analysis |
0.4 | 4 | 2014 | ARC++: effective typestate and lifetime dependency analysis · ISSTA 2014 WYSINWYX: What you see is not what you eXecute · ACM Trans. Program. Lang. Syst. 2010 There's Plenty of Room at the Bottom: Analyzing and Verifying Machine Code · CAV 2010 |
Natural language and speech › Language models and text generation
pre-trained language model |
0.4 | 1 | 2020 | Learning and Evaluating Contextual Embedding of Source Code · ICML 2020 |
Program analysis
code representation learning |
0.4 | 1 | 2020 | Learning and Evaluating Contextual Embedding of Source Code · ICML 2020 |
Empirical software engineering
mining software repositories |
0.4 | 1 | 2020 | Learning and Evaluating Contextual Embedding of Source Code · ICML 2020 |
Program analysis › type-based analysis
typestate analysis |
0.2 | 1 | 2014 | ARC++: effective typestate and lifetime dependency analysis · ISSTA 2014 |
Software testing › test generation
coverage-based test generation |
0.2 | 1 | 2013 | Feedback-directed unit test generation for C/C++ using concolic execution · ICSE 2013 |
Program analysis › symbolic execution
dynamic symbolic execution |
0.2 | 1 | 2013 | Feedback-directed unit test generation for C/C++ using concolic execution · ICSE 2013 |
Software testing › test generation › dynamic test generation
feedback-directed test generation |
0.2 | 1 | 2013 | Feedback-directed unit test generation for C/C++ using concolic execution · ICSE 2013 |
Software testing › test generation
unit test generation |
0.2 | 1 | 2013 | Feedback-directed unit test generation for C/C++ using concolic execution · ICSE 2013 |
Concurrent programming › concurrency bugs
atomicity violation |
0.1 | 1 | 2011 | BEST: A symbolic testing tool for predicting multi-threaded program failures · ASE 2011 |
Concurrent programming
concurrency bugs |
0.1 | 1 | 2011 | BEST: A symbolic testing tool for predicting multi-threaded program failures · ASE 2011 |
Program analysis › symbolic execution
constraint-based symbolic search |
0.1 | 1 | 2011 | BEST: A symbolic testing tool for predicting multi-threaded program failures · ASE 2011 |
Program verification › model checking
software model checking |
0.1 | 1 | 2011 | DC2: A framework for scalable, scope-bounded software verification · ASE 2011 |
Program analysis
specification mining |
0.1 | 1 | 2011 | DC2: A framework for scalable, scope-bounded software verification · ASE 2011 |
Software testing › test generation
symbolic testing |
0.1 | 1 | 2011 | BEST: A symbolic testing tool for predicting multi-threaded program failures · ASE 2011 |
Debugging and program repair
fault localization |
0.1 | 1 | 2010 | WYSINWYX: What you see is not what you eXecute · ACM Trans. Program. Lang. Syst. 2010 |
Program analysis › binary analysis
machine code analysis |
0.1 | 1 | 2010 | There's Plenty of Room at the Bottom: Analyzing and Verifying Machine Code · CAV 2010 |
Program verification › code-level verification
machine code verification |
0.1 | 1 | 2010 | There's Plenty of Room at the Bottom: Analyzing and Verifying Machine Code · CAV 2010 |
Program analysis
binary analysis |
0.1 | 1 | 2005 | Model Checking x86 Executables with CodeSurfer/x86 and WPDS++ · CAV 2005 |
Automata and formal languages › pushdown automata
pushdown systems |
0.1 | 1 | 2005 | Extended Weighted Pushdown Systems · CAV 2005 |
Automated reasoning and model checking › model checking
software model checking |
0.1 | 1 | 2005 | Model Checking x86 Executables with CodeSurfer/x86 and WPDS++ · CAV 2005 |
Compilers and program optimization › dependence analysis
system dependence graph |
0.0 | 1 | 2010 | WYSINWYX: What you see is not what you eXecute · ACM Trans. Program. Lang. Syst. 2010 |
Methods — techniques the papers use, named apart from their topics
word2vec · 0.9transformer · 0.9pre-training · 0.9fine-tuning · 0.9BiLSTM · 0.9BERT · 0.9abstract interpretation · 0.2non-linear solvers · 0.2concolic execution · 0.2binary instrumentation · 0.1weighted pushdown system · 0.1
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2020 | Learning and Evaluating Contextual Embedding of Source CodeabstractRecent research has achieved impressive results on understanding and improving source code by building up on machine-learning techniques developed for natural languages. A significant advancement in natural-language understanding has come with the development of pre-trained contextual embeddings, such as BERT, which can be fine-tuned for downstream tasks with less labeled data and training budget, while achieving better accuracies. However, there is no attempt yet to obtain a high-quality contextual embedding of source code, and to evaluate it on multiple program-understanding tasks simultaneously; that is the gap that this paper aims to mitigate. Specifically, first, we curate a massive, deduplicated corpus of 7.4M Python files from GitHub, which we use to pre-train CuBERT, an open-sourced code-understanding BERT model; and, second, we create an open-sourced benchmark that comprises five classification tasks and one program-repair task, akin to code-understanding tasks proposed in the literature before. We fine-tune CuBERT on our benchmark tasks, and compare the resulting models to different variants of Word2Vec token embeddings, BiLSTM and Transformer models, as well as published state-of-the-art models, showing that CuBERT outperforms them all, even with shorter training, and with fewer labeled examples. Future work on source-code embedding can benefit from reusing our benchmark, and from comparing against CuBERT models as a strong baseline. Aditya Kanade 0001, Petros Maniatis, Gogul Balakrishnan, Kensen Shi |
ICML | 3 |
| 2015 | Scalable and scope-bounded software verification in Varvel
Franjo Ivancic, Gogul Balakrishnan, Aarti Gupta, Sriram Sankaranarayanan 0001, Naoto Maeda, Takashi Imoto, Rakesh Pothengil, Mustafa Hussain |
Autom. Softw. Eng. | 2 |
| 2014 | ARC++: effective typestate and lifetime dependency analysisabstractThe ever-increasing reliance of today's society on software requires scalable and precise techniques for checking the correctness, reliability, and robustness of software. Object-oriented languages have been used extensively to build large-scale systems, including Java and C++. While many scalable static analysis approaches for C and Java have been proposed, there has been comparatively little work on the static analysis of C++ programs. In this paper, we provide an abstract representation to model C++ objects, containers, references, raw pointers, and smart pointers. Further, we present a new analysis called lifetime dependency analysis, which allows us to precisely track the complex lifetime semantics of temporary objects in C++. Finally, we propose an implementation of our techniques and present promising %experimental results on a large variety of open-source software. Xusheng Xiao, Gogul Balakrishnan, Franjo Ivancic, Naoto Maeda, Aarti Gupta, Deepak Chhetri |
ISSTA | 2 |
| 2013 | Feedback-directed unit test generation for C/C++ using concolic executionabstractIn industry, software testing and coverage-based metrics are the predominant techniques to check correctness of software. This paper addresses automatic unit test generation for programs written in C/C++. The main idea is to improve the coverage obtained by feedback-directed random test generation methods, by utilizing concolic execution on the generated test drivers. Furthermore, for programs with numeric computations, we employ non-linear solvers in a lazy manner to generate new test inputs. These techniques significantly improve the coverage provided by a feedback-directed random unit testing framework, while retaining the benefits of full automation. We have implemented these techniques in a prototype platform, and describe promising experimental results on a number of C/C++ open source benchmarks. Pranav Garg 0001, Franjo Ivancic, Gogul Balakrishnan, Naoto Maeda, Aarti Gupta |
ICSE | 3 |
| 2012 | Object Model Construction for Inheritance in C++ and Its Applications to Program Analysis
Jing Yang 0003, Gogul Balakrishnan, Naoto Maeda, Franjo Ivancic, Aarti Gupta, Nishant Sinha 0001, Sriram Sankaranarayanan 0001, Naveen Sharma |
CC | 2 |
| 2012 | Donut Domains: Efficient Non-convex Domains for Abstract Interpretation
Khalil Ghorbal, Franjo Ivancic, Gogul Balakrishnan, Naoto Maeda, Aarti Gupta |
VMCAI | 3 |
| 2011 | Interprocedural Exception Analysis for C++
Prakash Prabhu, Naoto Maeda, Gogul Balakrishnan, Franjo Ivancic, Aarti Gupta |
ECOOP | 3 |
| 2011 | BEST: A symbolic testing tool for predicting multi-threaded program failuresabstractWe present a tool BEST (Binary instrumentation-based Error-directed Symbolic Testing) for predicting concurrency violations.1We automatically infer potential concurrency violations such as atomicity violations from an observed run of a multi-threaded program, and use precise modeling and constraint-based symbolic (non-enumerative) search to find feasible violating schedules in a generalization of the observed run. We specifically focus on tool scalability by devising POR-based simplification steps to reduce the formula and the search space by several orders-of-magnitude. We have successfully applied the tool to several publicly available C/C++/Java programs and found several previously known/unknown concurrency related bugs. The tool also has extensive visual support for debugging. Malay K. Ganai, Nipun Arora, Chao Wang 0001, Aarti Gupta, Gogul Balakrishnan |
ASE | 5 |
| 2011 | DC2: A framework for scalable, scope-bounded software verificationabstractSoftware model checking and static analysis have matured over the last decade, enabling their use in automated software verification. However, lack of scalability makes these tools hard to apply. Furthermore, approximations in the models of program and environment lead to a profusion of false alarms. This paper proposes DC2, a verification framework using scope-bounding to bridge these gaps. DC2 splits the analysis problem into manageable parts, relying on a combination of three automated techniques: (a) techniques to infer useful specifications for functions in the form of pre- and post-conditions; (b) stub inference techniques that infer abstractions to replace function calls beyond the verification scope; and (c) automatic refinement of pre- and post-conditions from false alarms identified by a user. DC2 enables iterative reasoning over the calling environment, to help in finding non-trivial bugs and fewer false alarms. We present an experimental evaluation that demonstrates the effectiveness of DC2 on several open-source and industrial software projects. Franjo Ivancic, Gogul Balakrishnan, Aarti Gupta, Sriram Sankaranarayanan 0001, Naoto Maeda, Hiroki Tokuoka, Takashi Imoto, Yoshiaki Miyazaki |
ASE | 2 |
| 2010 | There's Plenty of Room at the Bottom: Analyzing and Verifying Machine Code
Thomas W. Reps, Junghee Lim, Aditya V. Thakur, Gogul Balakrishnan, Akash Lal |
CAV | 4 |
| 2010 | Scalable and precise program analysis at NEC
Gogul Balakrishnan, Malay K. Ganai, Aarti Gupta, Franjo Ivancic, Vineet Kahlon, Naoto Maeda, Nadia Papakonstantinou, Sriram Sankaranarayanan 0001, Nishant Sinha 0001, Chao Wang 0001 |
FMCAD | 1 |
| 2010 | WYSINWYX: What you see is not what you eXecuteabstractOver the last seven years, we have developed static-analysis methods to recover a good approximation to the variables and dynamically allocated memory objects of a stripped executable, and to track the flow of values through them. The article presents the algorithms that we developed, explains how they are used to recover Intermediate Representations (IRs) from executables that are similar to the IRs that would be available if one started from source code, and describes their application in the context of program understanding and automated bug hunting. Unlike algorithms for analyzing executables that existed prior to our work, the ones presented in this article provide useful information about memory accesses, even in the absence of debugging information. The ideas described in the article are incorporated in a tool for analyzing Intel x86 executables, called CodeSurfer/x86. CodeSurfer/x86 builds a system dependence graph for the program, and provides a GUI for exploring the graph by (i) navigating its edges, and (ii) invoking operations, such as forward slicing, backward slicing, and chopping, to discover how parts of the program can impact other parts. To assess the usefulness of the IRs recovered by CodeSurfer/x86 in the context of automated bug hunting, we built a tool on top of CodeSurfer/x86, called Device-Driver Analyzer for x86 (DDA/x86), which analyzes device-driver executables for bugs. Without the benefit of either source code or symbol-table/debugging information, DDA/x86 was able to find known bugs (that had been discovered previously by source-code analysis tools), along with useful error traces, while having a low false-positive rate. DDA/x86 is the first known application of program analysis/verification techniques to industrial executables. Gogul Balakrishnan, Thomas W. Reps |
ACM Trans. Program. Lang. Syst. | 1 |
| 2009 | Refining the control structure of loops using static analysisabstractWe present a simple yet useful technique for refining the control structure of loops that occur in imperative programs. Loops containing complex control flow are common in synchronous embedded controllers derived from modeling languages such as Lustre, Esterel, and Simulink/Stateflow. Our approach uses a set of labels to distinguish different control paths inside a given loop. The iterations of the loop are abstracted as a finite state automaton over these labels. Subsequently, we use static analysis techniques to identify infeasible iteration sequences and subtract such forbidden sequences from the initial language to obtain a refinement. In practice, the refinement of control flow sequences often simplifies the control flow patterns in the loop. We have applied the refinement technique to improve the precision of abstract interpretation in the presence of widening. Our experiments on a set of complex reactive loop benchmarks clearly show the utility of our refinement techniques. Abstraction interpretation with our refinement technique was able to verify all the properties for 10 out of the 13 benchmarks, while abstraction interpretation without refinement was able to verify only four. Other potentially useful applications include termination analysis and reverse engineering models from source code. Gogul Balakrishnan, Sriram Sankaranarayanan 0001, Franjo Ivancic, Aarti Gupta |
EMSOFT | 1 |
| 2008 | Improved Memory-Access Analysis for x86 Executables
Thomas W. Reps, Gogul Balakrishnan |
CC | 2 |
| 2008 | SLR: Path-Sensitive Analysis through Infeasible-Path Detection and Syntactic Language Refinement
Gogul Balakrishnan, Sriram Sankaranarayanan 0001, Franjo Ivancic, Ou Wei, Aarti Gupta |
SAS | 1 |
| 2008 | PED: Proof-Guided Error Diagnosis by Triangulation of Program Error CausesabstractError diagnosis, which is the process of identifying the root causes of bugs in software, is a time-consuming process. In general, it is hard to automate error diagnosis due to the unavailability of a full ldquogoldenrdquo specification of the system behavior in realistic software development. We propose a repair-based proof-guided error diagnosis (PED) framework, that provides a first-line attack to find the root causes of the errors in programs by pin-pointing the possible error-sites (buggy statements), and suggesting possible repair fixes. Our framework does not need a complete system specification. Instead, it automatically ldquominesrdquo partial specifications of the intended program behavior from the proofs obtained by static program analysis for standard safety checkers. It uses these partial specifications along with the multiple error traces provided by a model checker to narrow down the possible error sites. It also exploits inherent correlations among the program statements. To capture common programming mistakes, it directs the search to those statements that could be buggy due to simple copy-paste operations or syntactic mistakes such as using les instead of <. To further improve debugging, it prioritizes the repair solutions. We implemented and integrated the PED tool as a plug-in module to a software verification framework. We show the efficacy of such a framework on public benchmarks. Gogul Balakrishnan, Malay K. Ganai |
SEFM | 1 |
| 2008 | Analyzing Stripped Device-Driver Executables
Gogul Balakrishnan, Thomas W. Reps |
TACAS | 1 |
| 2007 | DIVINE: DIscovering Variables IN Executables
Gogul Balakrishnan, Thomas W. Reps |
VMCAI | 1 |
| 2006 | Intermediate-representation recovery from low-level codeabstractThe goal of our work is to create tools that an analyst can use to understand the workings of COTS components, plugins, mobile code, and DLLs, as well as memory snapshots of worms and virus-infected code. This paper describes how static analysis provides techniques that can be used to recover intermediate representations that are similar to those that can be created for a program written in a high-level language. Thomas W. Reps, Gogul Balakrishnan, Junghee Lim |
PEPM | 2 |
| 2006 | Recency-Abstraction for Heap-Allocated Storage
Gogul Balakrishnan, Thomas W. Reps |
SAS | 1 |
| 2005 | A Next-Generation Platform for Analyzing Executables
Thomas W. Reps, Gogul Balakrishnan, Junghee Lim, Tim Teitelbaum |
APLAS | 2 |
| 2005 | Model Checking x86 Executables with CodeSurfer/x86 and WPDS++
Gogul Balakrishnan, Thomas W. Reps, Nicholas Kidd, Akash Lal, Junghee Lim, David Melski, Radu Gruian, Suan Hsi Yong, Tim Teitelbaum |
CAV | 1 |
| 2005 | Extended Weighted Pushdown Systems
Akash Lal, Thomas W. Reps, Gogul Balakrishnan |
CAV | 3 |
| 2005 | CodeSurfer/x86-A Platform for Analyzing x86 Executables
Gogul Balakrishnan, Radu Gruian, Thomas W. Reps, Tim Teitelbaum |
CC | 1 |
| 2004 | Analyzing Memory Accesses in x86 Executables
Gogul Balakrishnan, Thomas W. Reps |
CC | 1 |