文章目录
概念介绍
1. 代码静态分析
- 代码静态分析是指在不运行代码的方式下,通过词法分析、语法分析和控制流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性和可维护性等指标的一种代码分析技术。
- 这里的代码包括源代码和二进制代码,因此代码静态分析又可以分为元代码静态分析和二进制代码静态分析。
1.1 代码静态分析的内容
- 代码静态分析的内容包括代码检查、静态结构分析和代码质量度量等。
- 代码检查包括代码走查、桌面检查和代码审查等,主要检查代码和设计的一致性,代码对标准的遵循、可读性,代码的逻辑表达的正确性,代码结构的合理性等方面。
- 可以发现违背程序编写标准的问题,发现程序中不安全、不明确和模糊的部分,找出程序中不可移植部分、违背程序编程风格的问题,包括变量检查、命名和类型审查、程序逻辑审查、程序语法检查和结构检查等内容。
1.2 代码静态分析采用的技术
常用的静态分析技术如下,这些技术之间是相互关联的,有些是层层递进的。
- 词法分析:从左至右逐字符读入源程序,对构成源程序的字符流进行扫描,通过使用正则表达式匹配方法将源代码转换为等价的符号(Token)流,生成相关符号列表。
- 语法分析:判断源程序结构上是否正确,通过使用上下文无关语法将相关符号整理为语法树。
- 抽象语法树分析:将程序组织成树形结构,树中的相关节点代表了程序中的相关代码。
- 语义分析:对结构上正确的源程序进行上下文有关性质的审查。
- 控制流分析:生成有向控制流图(控制流图,CFG是编译器内部用有向图表示一个程序过程的一种抽象数据结构,图中的结点表示一个程序基本块,基本块是没有任何跳转的顺序语句代码;图中的边表示代码中的跳转,它是有向边,起点和终点都是基本块),用结点表示代码基本代码块,结点间的有向边代表控制流路径,反向边代表可能存在的循环;还可生成函数调用关系图,表示函数间的嵌套关系。
- 数据流分析:对控制流图进行遍历,记录变量的初始化点和引用点,保存相关数据信息。通过静态模拟应用程序的执行路径,帮助用户找到运行时才能暴露的一些严重错误,如资源泄漏、空指针异常、SQL注入及其他的安全性漏洞等潜在的运行时错误。
- 污点分析:“污点”是指所有来自不可靠数据源的数据,