主权项 |
一种基于符号执行虚拟机的数据竞争检测与重放方法,其特征在于,包括以下步骤:(1)接收来自宿主机端的程序执行轨迹运行请求,并判断该请求是重放请求,还是检测请求,如果是重放请求,则进入步骤(2),否则进入步骤(5);(2)判断该重放请求对应的记录文件是否存在于磁盘中,如果存在则转入步骤(3),否则过程结束;(3)获取记录文件中的程序执行信息文件,通过获取符号执行虚拟机中的全局变量读写指令和/或多线程函数调用指令调用检测函数,以加载记录文件中线程指令之间的约束条件,并根据约束条件判断全局变量读写指令和/或多线程函数调用指令是否能够被执行,如果能则执行步骤(4),否则过程结束;(4)执行全局变量读写指令和/或多线程函数指令,过程结束;(5)在符号执行虚拟机中执行检测请求对应的多线程程序,监测多个线程之间对多线程程序中的全局变量访问,并记录多线程对全局变量访问的先后顺序,并将这些先后顺序信息记录到二进制文件中,以生成程序执行信息文件;(6)获取符号执行虚拟机中的指令信息,采用数据竞争检测算法检测指令信息中的全局变量读写,并利用多线程函数调用拦截功能调用指令信息中的多线程函数,以判断全局变量读写是否存在数据竞争,如果是则将数据竞争检测错误的信息报告给客户端,若程序执行未结束,则获取获得符号执行虚拟机的容器存放的下一条指令信息,并转到步骤(5)执行。 |