中文

堆不说谎:以堆快照遏制静态分析的不完备性

编程语言 2019-05-07 v1

摘要

静态分析力求探索所有可能执行以实现可靠性(soundness)。然而在实践中,它们未能捕获常见的动态行为。用动态信息增强静态分析是一种常见模式,例如Tamiflex等工具。但过去的方法由于原生代码、不支持的特性(如Java中的invokedynamic或lambda)等原因,遗漏了动态行为的很大一部分。我们提出一些技术,能在几乎不侵入分析逻辑的情况下大幅抵消静态分析的不完备性(unsoundness)。我们的方法在HeapDL工具链中具体化,包括在执行期间拍摄整个堆的快照,并进一步丰富以捕获动态行为的重要方面,无论其行为成因如何。这些快照随后用作静态分析的额外输入。该方法兼具可移植性与显著提升的覆盖率。在一组动态输入下的堆信息可使静态分析覆盖其他输入下更多的动态行为。对DaCapo基准测试的HeapDL增强静态分析计算出未见动态执行的调用图边的99.5%(中位数)(而Tamiflex工具仅为76.9%)。

关键词

引用

@article{arxiv.1905.02088,
  title  = {Heaps Don't Lie: Countering Unsoundness with Heap Snapshots},
  author = {Neville Grech and George Fourtounis and Adrian Francalanza and Yannis Smaragdakis},
  journal= {arXiv preprint arXiv:1905.02088},
  year   = {2019}
}

备注

OOPSLA 2017