论文部分内容阅读
软件的复杂性和抽象性使在当前软件开发过程中不可避免的存在错误,加之嵌入式系统时间和空间资源有限、高可靠性和高实时性等原因,使得针对嵌入式软件缺陷的检测难度加大。对静态分析方法的研究比较早,研究成果也比较多,但是静态方法难以检测软件运行时错误,且具有高误报率等缺点。动态分析方法是另一种运用比较广泛的软件分析方法,它不仅可以检测出一些隐藏缺陷,还可以追踪到运行时错误。然而,动态分析方法主要针对二进制程序,由于缺乏源码,无法获得准确的语法和语义信息,增加了分析难度。因此,基于动态分析方法的嵌入式软件缺陷检测技术的研究成为当前研究的一个难点,也是一个热点。从CVE[1]统计数据结果可以看出缓冲区溢出缺陷数量在整个软件缺陷中占据着一个很大的比例,整型符号转换缺陷数量也在逐年上升。而目前对这两方面缺陷的检测技术都存在一些不足之处,没有一种很有效的检测方法,导致缺陷数量一直没有下降的趋势。因此,本文主要针对这两种缺陷,利用现在快速发展、应用广泛的动态插桩技术提出一些解决办法:缓冲区溢出缺陷检测方法和整型符号转换缺陷检测方法。本文在上述两种方法的基础上,开展了基于动态分析方法的嵌入式软件缺陷检测技术的研究,实现了一个基于虚拟仿真环境的二进制程序软件缺陷检测系统,论文主要研究内容和创新点如下:1、研究了缓冲区溢出原理。并针对缓冲区溢出缺陷,提出一种有效检测方法。即首先通过为缓冲区内存建立影子内存来记录内存访问情况,然后插入分析代码来更新影子内存,最后通过检查写入操作内存对应的影子内存来识别缓冲区溢出行为,以及通过替换字符串相关函数来检查参数及内容来发现溢出情况。2、研究了整型符号转换错误原理。针对这类缺陷,提出一种准确检测和定位缺陷位置的方法。首先通过类型推断方法来提取整型变量的符号类型信息,然后分析内存相关函数的参数类型信息,将得到的冲突类型集合作为潜在缺陷集合,并记录产生冲突类型的指令地址信息,最后插入检测代码来确定真正的整型符号转换缺陷及定位缺陷位置。3、基于Valgrind插桩框架,利用上述方法设计并实现二进制程序缺陷检测原型工具,并结合QEMU仿真软件搭建的嵌入式运行平台,实现一个嵌入式软件缺陷动态检测系统。最后,进行系统测试,通过实验验证系统对嵌入式软件缺陷检测的有效性。