论文标题
宾果游戏:通过二进制分析中的Pointer otifrency Bugs
BinGo: Pinpointing Concurrency Bugs in Go via Binary Analysis
论文作者
论文摘要
Golang(也称为Short Go)在分布式系统中构建并发计划方面变得很流行。作为独特的功能,GO使用轻质的goroutines来支持用户空间中高度并行性。此外,GO利用频道可以在线程之间进行明确的通信。但是,最近的研究表明,在GO应用程序中并不少见。在实际GO应用程序中查明这些并发错误既重要又具有挑战性。现有方法主要基于编译器辅助或动态分析,这些分析具有两个限制。首先,现有的方法需要源代码的可用性和重新编码,这些方法在测试环境中效果很好,而不是无用于应用程序和外部库的源代码的生产环境。其次,现有方法仅适用于纯GO代码库,而不是与GO和其他语言混合的程序。为了解决这些限制,我们开发了宾果游戏,这是第一个通过动态二进制分析在GO应用程序中识别并发错误的工具。宾果游戏将二进制执行与GO语义相关联并采用新颖的错误检测算法。宾果游戏是一种端到端工具,可以在生产环境中进行部署,而无需对源代码,编译器和GO生态系统中的运行时间进行修改。我们的实验表明,宾果游戏具有没有误报的同时漏洞的高度覆盖范围。我们能够使用宾果游戏来识别具有中等开销的真实应用程序中的并发错误。
Golang (also known as Go for short) has become popular in building concurrency programs in distributed systems. As the unique features, Go employs lightweight Goroutines to support highly parallelism in user space. Moreover, Go leverages channels to enable explicit communication among threads. However, recent studies show that concurrency bugs are not uncommon in Go applications. Pinpointing these concurrency bugs in real Go applications is both important and challenging. Existing approaches are mostly based on compiler-aided static or dynamic analysis, which have two limitations. First, existing approaches require the availability and recompilation of the source code, which work well on testing rather than production environments with no source code available for both applications and external libraries. Second, existing approaches work on pure Go code bases only, not programs mixed with Go and other languages. To address these limitations, we develop BinGo, the first tool to identify concurrency bugs in Go applications via dynamic binary analysis. BinGo correlates binary execution with Go semantics and employs novel bug detection algorithms. BinGo is an end-to-end tool that is ready for deployment in the production environment with no modification on source code, compilers, and runtimes in the Go eco-system. Our experiments show that BinGo has a high coverage of concurrency bugs with no false positives. We are able to use BinGo to identify concurrency bugs in real applications with moderate overhead.