Skip to content
Free planNo credit card requiredStart writing

Search 250 million research papers

Read the abstract, see who wrote it and who cites it, and get the citation in APA, MLA, Chicago or Harvard.

About 6,758 papers for “Call graph”

Static Call Graph Combination to Simulate Dynamic Call Graph Behavior

Zoltán Ságodi, Edit Pengő, Judit Jász et al. · IEEE Access · 2022

Call graphs are fundamental for many higher-level code analyses. The selection of the most appropriate call graph construction tool for an analysis is not always straightforward and depends on the purpose of the results’ further usage. The choice of call graph construction tool has a great effect on the following tasks’ execution time, memory usage, and result quality. This research compares the resulting static and dynamic Java call graphs to assist in the selection of the most appropriate tools. Static call graphs, as their name suggests, are constructed by static analysis, based on the source code or the bytecode, without executing tests or any code parts. This means that the project can be analyzed in its early stages and with fewer resources, but there is concern that this will result in less accurate, noisier graphs since the dynamic behavior of the programs will be estimated by static algorithms. Inaccuracies can greatly affect analyses based on call graphs. On the other hand, dynamic call graphs are created during the actual execution of the program. The calls that are included as edges in the graph are exactly those that were executed during the run, so you can expect the result to be more accurate. However, dynamic analysis requires more resources and the execution of code via test cases which provide high test coverage. In this work, we investigated the relationship between dynamic and static call graphs. Is the graph generated by dynamic analysis really better? Can static graphs approximate or even complement dynamic call graphs with sound results? In order to find the answers to these questions, we compared the results of five static and one dynamic analyzer. They were evaluated on three projects of different sizes and test coverage. We included in the comparison a merged graph created by ourselves by combining different static analyzer outputs. Not only did we compare static graphs to the dynamic results, we also validated the calls in a dynamic graph and found that these graphs could mislead the user. The results show that dynamic graphs should be considered good, although not a golden standard since they contain phantom calls, calls that are not present in the source code. Such calls are not limited to synthetic calls. Static analyzers could not be applied without consideration either, but a combination of static call graphs does tend to contain similar calls to the dynamic graphs with no phantom calls.

Cited by 3Open access

Call Graph Delta Analyzer

Sozer, Hasan · Figshare · 2023

A software tool for analyzing changes and security vulnerabilities on call graphs, and a sample dataset obtained from a set of open source Python projects.

Cited by 0Open access

Call graph approximation - appendix

Zoltán Ságodi, Edit Pengő · Zenodo (CERN European Organization for Nuclear Research) · 2022

This file contains every additional information for our journal<sup>1</sup> about call graphs in order to allow the reader to reproduce our results. The main directories are the following: - diff_for_cg: this contains the sources needed to compile our tool we created our results, call graphs comparisons and approximations. It includes the input files too. - results: this contains all the results for the projects described in the journal: MavenCore, Joda-time, Sortpom-Sorter - tools: this contains all the tools we used to generate call graphs that were later used as inputs for our diff tool. <sup>1</sup><code>Static call graph combination to simulate dynamic call graph behavior - Zoltán Ságodi, Edit Pengő, Judit Jász, István Siket, Rudolf Ferenc</code>

Cited by 0Open access

Fast Call Graph Profiling

Smithsen, Eirik · Duo Research Archive (University of Oslo) · 2020

CPUer er ikke-spesialiserte chiper som kan utføre alle beregninger, og de er ikke optimalisert til å utføre noen beregninger mye raskere enn andre. Det er mulig å lage chiper som er optimaliserte til å utføre et begrenset sett med beregninger mye raskere enn en CPU kan gjøre tilsvarende beregninger. Slike chiper kalles akseleratorer. Siden CPU-ytelse has stagnert de siste årene har forskere foreslått å bruke re-konfigurerbare chiper, slik som Field Programmable Gate Arrays og Coarse Grained Reconfigurable Arrays, som akseleratorer som kan akselerere hvilket som helst program. For at programmerer skal vite hvilken del av programmet som bør akselereres så han han kjøre kode som obsererer hvordan hans program oppfører seg. Dersom det er mulig å kjøre programmet en gang med kode som observerer flere forskjellige aspekter ved programmet, uten at koden for de forskjellige aspektene påvirker hverandres observasjoner, så er det mulig å spare tid fordi man trenger kun å kjøre programmet en gang.\n\nI denne oppgaven har jeg undersøkt om det er mulig å observere både hvor mye tid som blir brukt i hver funksjon i koden og observere den dynamiske funksjonskall-grafen i en enkelt kjøring av programmet. For å gjøre dette så har jeg laget Fast Call Graph profiler som observerer funksjonskall-grafen til programmer. Jeg har også evaluert hvor mye dette verktøyet sakker ned koden som det observerer og sammenlignet med hvor mye liknende vertøy sakker ned koden.\n\nDet jeg har funnet er at Fast Call Graph profiler påvirker ikke i noe stor grad hvor mye tid programmet bruker i hver funksjon. Det vil si at det er mulig å både observere hvor mye tid som brukes i hver funksjon og observere den dynamiske funksjonskall-grafen samtidig og få brukbare resultater. Fast Call Grap profiler sakker programmet ned betydelig mindre enn Gprof og innebygd Clang observering, som var de andre verktøyene jeg sammenlignet med.

Cited by 0Open access

Partitioning a Call Graph

Rob H. Bisseling, Jarosław Byrka, Selin Cerav-Erbas et al. · Data Archiving and Networked Services (DANS) · 2005

In recent years, the capabilities of information technology have increased tremendously. At the same time, large software systems in today’s organizations

Cited by 17Open access

Call Graph Delta Analyzer

Sozer, Hasan · Figshare · 2023

A software tool for analyzing changes and security vulnerabilities on call graphs, and a sample dataset obtained from a set of open source Python projects.

Cited by 0Open access

Mako Call Graph Construction

Anonymous · Zenodo (CERN European Organization for Nuclear Research) · 2025

Mako is a practical analyzer for type-based indirect call resolution.

Cited by 0Open access

Call Me Maybe: Enhancing JavaScript Call Graph Construction using Graph Neural Networks

Bhuiyan, Masudul Hasan Masud, De Stefano, Gianluca, Pellegrino, Giancarlo et al. · ArXiv.org · 2025

Static analysis plays a key role in finding bugs, including security issues. A critical step in static analysis is building accurate call graphs that model function calls in a program. However, due to hard-to-analyze language features, existing call graph construction algorithms for JavaScript are neither sound nor complete. Prior work shows that even advanced solutions produce false edges and miss valid ones. In this work, we assist these tools by identifying missed call edges. Our main idea is to frame the problem as link prediction on full program graphs, using a rich representation with multiple edge types. Our approach, GRAPHIA, leverages recent advances in graph neural networks to model non-local relationships between code elements. Concretely, we propose representing JavaScript programs using a combination of syntactic- and semantic-based edges. GRAPHIA can learn from imperfect labels, including static call edges from existing tools and dynamic edges from tests, either from the same or different projects. Because call graphs are sparse, standard machine learning metrics like ROC are not suitable. Instead, we evaluate GRAPHIA by ranking function definitions for each unresolved call site. We conduct a large-scale evaluation on 50 popular JavaScript libraries with 163K call edges (150K static and 13K dynamic). GRAPHIA builds program graphs with 6.6M structural and 386K semantic edges. It ranks the correct target as the top candidate in over 42% of unresolved cases and within the top 5 in 72% of cases, reducing the manual effort needed for analysis. Our results show that learning-based methods can improve the recall of JavaScript call graph construction. To our knowledge, this is the first work to apply GNN-based link prediction to full multi-file program graphs for interprocedural analysis.

Cited by 0Open access

Serialization-aware call graph construction

Joanna C. S. Santos, Reese A. Jones, Chinomso Ashiogwu et al. · 2021

Although call graphs are crucial for inter-procedural analyses, it is challenging to statically compute them for programs with dynamic features. Prior work focused on supporting certain kinds of dynamic features, but serialization-related features are still not very well supported. Therefore, we introduce Salsa, an approach to complement existing points-to analysis with respect to serialization-related features to enhance the call graph’s soundness while not greatly affecting its precision. We evaluate Salsa’s soundness, precision, and performance using 9 programs from the Java Call graph Assessment & Test Suite (CATS) and 4 programs from the XCorpus dataset. We compared Salsa against off-the-shelf call graph construction algorithms available on Soot, Doop, WALA, and OPAL. Our experiments showed that Salsa improved call graphs’ soundness while not greatly affecting their precision. We also observed that Salsa did not incur an extra overhead on the underlying pointer analysis method.

Cited by 11

Fast, Accurate Call Graph Profiling

Michael Spivey · 2007

Profiling is a technique for identifying performance bottlenecks in programs by measuring the time spent in each subroutine as the program runs. In call graph profiling, time used by each subroutine is also charged to its callers in order to give a better idea of how the time is divided among major tasks in the program. In order to do this with acceptable performance impact, a common implementation technique (used by GNU gprof among others) is to count the number of calls of each subroutine, and charge its time to the callers in proportion to the number of calls they make. Whilst this gives acceptably accurate results for simple programs, it is inaccurate for subroutines whose running time depends on the values of their arguments, and becomes almost useless for programs that exploit higher-order functions or dynamic method binding. Programs containing mutually recursive subroutines cause additional problems with this approach. In this article, we discuss a way of improving on gprof by collecting more information during execution, without significantly increasing the overhead of profiling. The method is based on the idea of keeping track of the set of subroutines that are active at each moment during the execution of the program being analysed and the calling arcs between these subroutines. By considering only the most recent activation of each subroutine, we arrange that even recursive programs give rise to a finite number of these contexts that is usually fairly small. The information can be collected e#ciently by dynamically constructing a finite state machine whose states correspond to execution contexts in the program. 1 1

Cited by 0

introducing order in call graph

Sun, Hong · Figshare · 2024

Call Graph is a directed graph that shows procedures and invocations between procedures in a program. Many approaches regarding the construction of Call Graph have been published in the past several decades. But to my knowledge, existing call graph construction algorithms do not consider the order of invocations. In this paper, I present an enhanced call graph that keeps track of the invocation orders of procedures if they are called by the same procedure. Also I provide an implementation of my approach based on SootUp - a library for source code analysis and optimization in Java.

Cited by 0Open access

introducing order in call graph

Sun, Hong · Figshare · 2024

Call Graph is a directed graph that shows procedures and invocations between procedures in a program. Many approaches regarding the construction of Call Graph have been published in the past several decades. But to my knowledge, existing call graph construction algorithms do not consider the order of invocations. In this paper, I present an enhanced call graph that keeps track of the invocation orders of procedures if they are called by the same procedure. Also I provide an implementation of my approach based on SootUp - a library for source code analysis and optimization in Java.

Cited by 0Open access