Gogul Balakrishnan

dblp:86/5106 · DBLP profile ↗
← Back
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

TopicWeightPapersLastEvidence papers
Program analysis
static analysis
0.442014
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.412020
Learning and Evaluating Contextual Embedding of Source Code · ICML 2020
Program analysis
code representation learning
0.412020
Learning and Evaluating Contextual Embedding of Source Code · ICML 2020
Empirical software engineering
mining software repositories
0.412020
Learning and Evaluating Contextual Embedding of Source Code · ICML 2020
Program analysis › type-based analysis
typestate analysis
0.212014
ARC++: effective typestate and lifetime dependency analysis · ISSTA 2014
Software testing › test generation
coverage-based test generation
0.212013
Feedback-directed unit test generation for C/C++ using concolic execution · ICSE 2013
Program analysis › symbolic execution
dynamic symbolic execution
0.212013
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.212013
Feedback-directed unit test generation for C/C++ using concolic execution · ICSE 2013
Software testing › test generation
unit test generation
0.212013
Feedback-directed unit test generation for C/C++ using concolic execution · ICSE 2013
Concurrent programming › concurrency bugs
atomicity violation
0.112011
BEST: A symbolic testing tool for predicting multi-threaded program failures · ASE 2011
Concurrent programming
concurrency bugs
0.112011
BEST: A symbolic testing tool for predicting multi-threaded program failures · ASE 2011
Program analysis › symbolic execution
constraint-based symbolic search
0.112011
BEST: A symbolic testing tool for predicting multi-threaded program failures · ASE 2011
Program verification › model checking
software model checking
0.112011
DC2: A framework for scalable, scope-bounded software verification · ASE 2011
Program analysis
specification mining
0.112011
DC2: A framework for scalable, scope-bounded software verification · ASE 2011
Software testing › test generation
symbolic testing
0.112011
BEST: A symbolic testing tool for predicting multi-threaded program failures · ASE 2011
Debugging and program repair
fault localization
0.112010
WYSINWYX: What you see is not what you eXecute · ACM Trans. Program. Lang. Syst. 2010
Program analysis › binary analysis
machine code analysis
0.112010
There's Plenty of Room at the Bottom: Analyzing and Verifying Machine Code · CAV 2010
Program verification › code-level verification
machine code verification
0.112010
There's Plenty of Room at the Bottom: Analyzing and Verifying Machine Code · CAV 2010
Program analysis
binary analysis
0.112005
Model Checking x86 Executables with CodeSurfer/x86 and WPDS++ · CAV 2005
Automata and formal languages › pushdown automata
pushdown systems
0.112005
Extended Weighted Pushdown Systems · CAV 2005
Automated reasoning and model checking › model checking
software model checking
0.112005
Model Checking x86 Executables with CodeSurfer/x86 and WPDS++ · CAV 2005
Compilers and program optimization › dependence analysis
system dependence graph
0.012010
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
YearPublicationVenuePosition
2020 Learning and Evaluating Contextual Embedding of Source Code
abstract
Recent 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
ICML3
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 analysis
abstract
The 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
ISSTA2
2013 Feedback-directed unit test generation for C/C++ using concolic execution
abstract
In 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
ICSE3
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
CC2
2012 Donut Domains: Efficient Non-convex Domains for Abstract Interpretation
Khalil Ghorbal, Franjo Ivancic, Gogul Balakrishnan, Naoto Maeda, Aarti Gupta
VMCAI3
2011 Interprocedural Exception Analysis for C++
Prakash Prabhu, Naoto Maeda, Gogul Balakrishnan, Franjo Ivancic, Aarti Gupta
ECOOP3
2011 BEST: A symbolic testing tool for predicting multi-threaded program failures
abstract
We 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
ASE5
2011 DC2: A framework for scalable, scope-bounded software verification
abstract
Software 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
ASE2
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
CAV4
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
FMCAD1
2010 WYSINWYX: What you see is not what you eXecute
abstract
Over 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 analysis
abstract
We 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
EMSOFT1
2008 Improved Memory-Access Analysis for x86 Executables
Thomas W. Reps, Gogul Balakrishnan
CC2
2008 SLR: Path-Sensitive Analysis through Infeasible-Path Detection and Syntactic Language Refinement
Gogul Balakrishnan, Sriram Sankaranarayanan 0001, Franjo Ivancic, Ou Wei, Aarti Gupta
SAS1
2008 PED: Proof-Guided Error Diagnosis by Triangulation of Program Error Causes
abstract
Error 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
SEFM1
2008 Analyzing Stripped Device-Driver Executables
Gogul Balakrishnan, Thomas W. Reps
TACAS1
2007 DIVINE: DIscovering Variables IN Executables
Gogul Balakrishnan, Thomas W. Reps
VMCAI1
2006 Intermediate-representation recovery from low-level code
abstract
The 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
PEPM2
2006 Recency-Abstraction for Heap-Allocated Storage
Gogul Balakrishnan, Thomas W. Reps
SAS1
2005 A Next-Generation Platform for Analyzing Executables
Thomas W. Reps, Gogul Balakrishnan, Junghee Lim, Tim Teitelbaum
APLAS2
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
CAV1
2005 Extended Weighted Pushdown Systems
Akash Lal, Thomas W. Reps, Gogul Balakrishnan
CAV3
2005 CodeSurfer/x86-A Platform for Analyzing x86 Executables
Gogul Balakrishnan, Radu Gruian, Thomas W. Reps, Tim Teitelbaum
CC1
2004 Analyzing Memory Accesses in x86 Executables
Gogul Balakrishnan, Thomas W. Reps
CC1