Demo Data from EDBT 2026 / reviewers in the wild / expert
Georgios Fourtounis 0001
dblp:130/7966-1 · also George Fourtounis
· DBLP profile ↗
9ranked-venue papers
4as first author
0since 2021 · last 2020
0000-0002-2116-0797ORCID · corroborated
Domains — the database's venue-derived domains; a paper can count in several
Software engineering, systems software and programming languages · 9 · 4 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
5 papers |
Program analysis · 83% Programming languages and type systems · 15% Runtime systems and virtual machines · 2% |
Topics — the 5 heaviest of 7, each with the papers that count most for it
| Topic | Weight | Papers | Last | Evidence papers |
|---|---|---|---|---|
Program analysis
static analysis |
1.8 | 5 | 2020 | Identifying Java calls in native code via binary scanning · ISSTA 2020 On the recall of static call graph construction in practice · ICSE 2020 Shooting from the heap: ultra-scalable static analysis with heap snapshots · ISSTA 2018 |
Program analysis › static analysis
call graph construction |
0.7 | 2 | 2020 | On the recall of static call graph construction in practice · ICSE 2020 Heaps don't lie: countering unsoundness with heap snapshots · Proc. ACM Program. Lang. 2017 |
Program analysis › static analysis
pointer analysis |
0.3 | 1 | 2018 | Shooting from the heap: ultra-scalable static analysis with heap snapshots · ISSTA 2018 |
Programming languages and type systems › type systems
soundness |
0.3 | 1 | 2017 | Heaps don't lie: countering unsoundness with heap snapshots · Proc. ACM Program. Lang. 2017 |
Programming languages and type systems › language implementation › foreign function interface
java native interface |
0.1 | 1 | 2020 | Identifying Java calls in native code via binary scanning · ISSTA 2020 |
Methods — techniques the papers use, named apart from their topics
dynamic analysis · 0.7test case execution · 0.4oracle-based evaluation · 0.4disassembly · 0.4binary scanning · 0.4logical rules · 0.3dynamic heap snapshot · 0.3doop · 0.3heap snapshotting · 0.3
| Year | Publication | Venue | Position |
|---|---|---|---|
| 2020 | On the recall of static call graph construction in practiceabstractStatic analyses have problems modelling dynamic language features soundly while retaining acceptable precision. The problem is well-understood in theory, but there is little evidence on how this impacts the analysis of real-world programs. We have studied this issue for call graph construction on a set of 31 real-world Java programs using an oracle of actual program behaviour recorded from executions of built-in and synthesised test cases with high coverage, have measured the recall that is being achieved by various static analysis algorithms and configurations, and investigated which language features lead to static analysis false negatives. Li Sui, Jens Dietrich 0001, Amjed Tahir, Georgios Fourtounis 0001 |
ICSE | 4 |
| 2020 | Identifying Java calls in native code via binary scanningabstractCurrent Java static analyzers, operating either on the source or bytecode level, exhibit unsoundness for programs that contain native code. We show that the Java Native Interface (JNI) specification, which is used by Java programs to interoperate with Java code, is principled enough to permit static reasoning about the effects of native code on program execution when it comes to call-backs. Our approach consists of disassembling native binaries, recovering static symbol information that corresponds to Java method signatures, and producing a model for statically exercising these native call-backs with appropriate mock objects. The approach manages to recover virtually all Java calls in native code, for both Android and Java desktop applications—(a) achieving 100% native-to-application call-graph recall on large Android applications (Chrome, Instagram) and (b) capturing the full native call-back behavior of the XCorpus suite programs. Georgios Fourtounis 0001, Leonidas Triantafyllou, Yannis Smaragdakis |
ISSTA | 1 |
| 2019 | Deep Static Modeling of invokedynamicabstractJava 7 introduced programmable dynamic linking in the form of the invokedynamic framework. Static analysis of code containing programmable dynamic linking has often been cited as a significant source of unsoundness in the analysis of Java programs. For example, Java lambdas, introduced in Java 8, are a very popular feature, which is, however, resistant to static analysis, since it mixes invokedynamic with dynamic code generation. These techniques invalidate static analysis assumptions: programmable linking breaks reasoning about method resolution while dynamically generated code is, by definition, not available statically. In this paper, we show that a static analysis can predictively model uses of invokedynamic while also cooperating with extra rules to handle the runtime code generation of lambdas. Our approach plugs into an existing static analysis and helps eliminate all unsoundness in the handling of lambdas (including associated features such as method references) and generic invokedynamic uses. We evaluate our technique on a benchmark suite of our own and on third-party benchmarks, uncovering all code previously unreachable due to unsoundness, highly efficiently. Georgios Fourtounis 0001, Yannis Smaragdakis |
ECOOP | 1 |
| 2018 | Static analysis of Java dynamic proxiesabstractThe dynamic proxy API is one of Java’s most widely-used dynamic features, permitting principled run-time code generation and link- ing. Dynamic proxies can implement any set of interfaces and for- ward method calls to a special object that handles them reflectively. The flexibility of dynamic proxies, however, comes at the cost of having a dynamically generated layer of bytecode that cannot be penetrated by current static analyses. In this paper, we observe that the dynamic proxy API is stylized enough to permit static analysis. We show how the semantics of dynamic proxies can be modeled in a straightforward manner as logical rules in the Doop static analysis framework. This concise set of rules enables Doop’s standard analyses to process code behind dynamic proxies. We evaluate our approach by analyzing XCorpus, a corpus of real-world Java programs: we fully handle 95% of its reported proxy creation sites. Our handling results in the analysis of significant portions of previously unreachable or incompletely- modeled code. Georgios Fourtounis 0001, George Kastrinis, Yannis Smaragdakis |
ISSTA | 1 |
| 2018 | Shooting from the heap: ultra-scalable static analysis with heap snapshotsabstractTraditional whole-program static analysis (e.g., a points-to analysis that models the heap) encounters scalability problems for realistic applications. We propose a ``featherweight'' analysis that combines a dynamic snapshot of the heap with otherwise full static analysis of program behavior. Neville Grech, Georgios Fourtounis 0001, Adrian Francalanza, Yannis Smaragdakis |
ISSTA | 2 |
| 2017 | Heaps don't lie: countering unsoundness with heap snapshotsabstractStatic analyses aspire to explore all possible executions in order to achieve soundness. Yet, in practice, they fail to capture common dynamic behavior. Enhancing static analyses with dynamic information is a common pattern, with tools such as Tamiflex. Past approaches, however, miss significant portions of dynamic behavior, due to native code, unsupported features (e.g., invokedynamic or lambdas in Java), and more. We present techniques that substantially counteract the unsoundness of a static analysis, with virtually no intrusion to the analysis logic. Our approach is reified in the HeapDL toolchain and consists in taking whole-heap snapshots during program execution, that are further enriched to capture significant aspects of dynamic behavior, regardless of the causes of such behavior. The snapshots are then used as extra inputs to the static analysis. The approach exhibits both portability and significantly increased coverage. Heap information under one set of dynamic inputs allows a static analysis to cover many more behaviors under other inputs. A HeapDL-enhanced static analysis of the DaCapo benchmarks computes 99.5% (median) of the call-graph edges of unseen dynamic executions (vs. 76.9% for the Tamiflex tool). Neville Grech, Georgios Fourtounis 0001, Adrian Francalanza, Yannis Smaragdakis |
Proc. ACM Program. Lang. | 2 |
| 2015 | Streams a la carte: Extensible Pipelines with Object AlgebrasabstractStreaming libraries have become ubiquitous in object-oriented languages, with recent offerings in Java, C#, and Scala. All such libraries, however, suffer in terms of extensibility: there is no way to change the semantics of a streaming pipeline (e.g., to fuse filter operators, to perform computations lazily, to log operations) without changes to the library code. Furthermore, in some languages it is not even possible to add new operators (e.g., a zip operator, in addition to the standard map, filter, etc.) without changing the library. We address such extensibility shortcomings with a new design for streaming libraries. The architecture underlying this design borrows heavily from Oliveira and Cook's object algebra solution to the expression problem, extended with a design that exposes the push/pull character of the iteration, and an encoding of higher-kinded polymorphism. We apply our design to Java and show that the addition of full extensibility is accompanied by high performance, matching or exceeding that of the original, highly-optimized Java streams library. Aggelos Biboudis, Nick Palladinos, Georgios Fourtounis 0001, Yannis Smaragdakis |
ECOOP | 3 |
| 2015 | Foo: a minimal modern OO calculusabstractWe present the Flyweight Object-Oriented (Fᴏᴏ) calculus for the modeling of object-oriented languages. Fᴏᴏ is a simple, minimal class-based calculus, modeling only essential computational aspects and emphasizing larger-scale features (e.g., inheritance and generics). Fᴏᴏ is motivated by the observation that recent language design work focuses on elements not well-captured either by traditional object calculi or by language-specific modeling efforts, such as Featherweight Java. Fᴏᴏ integrates seamlessly both nominal and structural subtyping ideas, leveraging the latter to eliminate the need for modeling object fields and constructors. Comparing to recent formalization efforts in the literature, Fᴏᴏ is more compact, yet versatile enough to be usable in multiple settings modeling Java, C#, or Scala extensions. Prodromos Gerakios, Georgios Fourtounis 0001, Yannis Smaragdakis |
FTfJP@ECOOP | 2 |
| 2013 | The Generalized Intensional Transformation for Implementing Lazy Functional Languages
Georgios Fourtounis 0001, Nikolaos S. Papaspyrou, Panos Rondogiannis |
PADL | 1 |