论文部分内容阅读
在线评测系统OnlineJudgeSystem(简称:OJ系统)是程序设计类竞赛和教学的重要辅助系统,以自动评测代替传统的手工评测代码的方式,具有高效率、高准确度的特点。但是,OJ系统通常是对提交的源代码直接进行编译、测试和运行,如果这些源程序存在错误或安全漏洞,将可能会给OJ系统造成安全隐患。所以对提交的源程序进行安全分析(在不运行程序的基础上)是十分必要的。本文设计了一个C/C++源代码静态检测系统,该系统会对学生提交的源代码(C/C++程序代码)进行检测。该系统将会检测源程序中是否存在数组越界、标准字符串函数错误、缓冲区越界等错误。这些错误在编译阶段很难被识别。当这些程序在学校的OnlineJudgeSystem运行时,就很可能危害到OJ系统的正常运行,甚至会造成系统的崩溃。C/C++源代码静态检测系统主要采用了静态分析技术和符号执行技术。系统利用静态分析技术对C/C++源程序进行预处理和静态分析,然后生成整个程序的静态分析树(静态分析树是系统进行符号执行的基础)和源程序文本对象。源代码静态检测系统通过符号执行技术对程序的静态分析树进行错误分析。在不执行程序的前提下,用符号值来表示程序中变量的值,然后按照设定的路径调度策略来模拟程序执行,同时在每个基本块中进行符号计算、获取路径约束条件、添加相应的安全约束,最后对程序的约束条件进行求解,从而来判断程序中是否存在数组越界、字符串函数调用错误、缓冲区越界等错误。