论文部分内容阅读
随着多线程技术在现代编程中的广泛使用,比如C中的pthread库、Java中的Thread类,人们对多线程程序的安全性越来越重视。原子性错误是并发程序错误的主要类型之一,如何检测和查找复杂并发程序的中的原子性错误具有重要的研究意义。同时,现今大量商业软件是以二进制代码的形式进行发布,这使得针对源代码为分析对象的分析技术无能为力。因此,有必要对二进制多线程程序的原子性错误检测方法进行研究。
对二进制多线程程序做原子性错误检测主要面临三个难点:一是如何区分违反原子性的真正和良性两种情况;二是如何处理多线程程序运行时线程序列不确定的问题;三是如何对二进制代码进行分析,因为对二进制代码比对源代码更难分析。为了解决以上问题,本文提出了基于模型检测的原子性错误检测方法MC-AVIO。该方法包含两个阶段:训练阶段和分析阶段。在训练阶段通过提取原子性迁移对集合的方法来识别真正违反原子性的情况,在分析阶段检测原子性错误时用动态模型检测的方法搜索程序所有可能的线程序列,解决了分析多线程程序时线程序列不确定的问题。另外,在实现MC-AVIO时采用诸如保守分析策略、多次动态分析等轻量级的方法来分析二进制程序。
基于MC-AVIO方法,本文实现了针对二进制程序的原子性错误检测工具AtomFinder。最后,本文在基准程序和注入变异的程序上评估了AtomFinder的检测效果,结果表明它对于检测原子性错误是有效的。