Heaps Don't Lie: Countering Unsoundness with Heap Snapshots

05/06/2019
by   Neville Grech, et al.
0

Static 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 the Tamiflex tool).

READ FULL TEXT

page 16

page 17

page 19

page 20

page 21

page 22

research
01/08/2020

Deep Static Modeling of invokedynamic

Java 7 introduced programmable dynamic linking in the form of the invoke...
research
12/20/2021

JuCify: A Step Towards Android Code Unification for Enhanced Static Analysis

Native code is now commonplace within Android app packages where it co-e...
research
02/07/2020

SLACC: Simion-based Language Agnostic Code Clones

Successful cross-language clone detection could enable researchers and d...
research
10/15/2018

Synthesizing Program-Specific Static Analyses

Designing a static analysis is generally a substantial undertaking, requ...
research
10/21/2019

Representing and Reasoning about Dynamic Code

Dynamic code, i.e., code that is created or modified at runtime, is ubiq...
research
07/12/2020

Determining Microservice Boundaries: A Case Study Using Static and Dynamic Software Analysis

A number of approaches have been proposed to identify service boundaries...
research
03/05/2020

Microservice Decomposition via Static and Dynamic Analysis of the Monolith

Migrating monolithic software systems into microservices requires the ap...

Please sign up or login with your details

Forgot password? Click here to reset