
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
随着互联网的不断发展,越来越多的人都在通过学习达内IT培训课程来实现互联网行业的转型发展,今天我们就通过案例分析来简单了解一下,软件开发代码理解分析。
代码理解是一个以软件程序为对象,对其内部的运作流程进行分析,获取相关的知识信息,这些信息可以用于软件开发、软件测试、软件维护等各个阶段,旨在对程序进行性能优化和正确性验证。代码理解常用的分析方向有静态分析、动态分析、非源码分析3类,但是随着LLM大模型的发展,我们也正在研究模型在代码理解领域的突破与应用。
静态分析:是指在不运行代码的方式下,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,验证代码是否满足规范性、安全性、可靠性、可维护性等指标的一种代码分析技术。
动态分析:软件系统在模拟的或真实的环境中执行之前、之中和之后,对软件系统行为的分析。
非代码分析:主要是对数据文件、配置文件等非源码文件和源码间进行关联分析,当代码仓变更时,能感知变更内容对源码、功能的影响。
动态分析多为对程序进行的一些功能测试或性能测试等对程序的运行结果,资源使用情况的相关程序分析工作。故本小节主要介绍静态程序分析相关的代码理解技术,不对动态程序分析做展开。
静态程序分析在不执行程序程序的情况下对程序进行分析,分析的对象可以是针对特定版本的源代码或者二进制文件,通过词法分析、语法分析、控制流、数据流分析等技术对程序代码进行扫描,根据不同的分析目标,得到对应的分析结果。在学术界和工业界主要应用在软件安全领域,验证代码是否满足规范性、安全性、可靠性、可维护性;在百度内部,除漏洞检测外,静态程序分析还包括多维度的代码分析和度量手段,在交付系统和监测系统中被广泛使用。
业界静态分析一般基于以下4种方式展开:
关键字匹配,基于正则表达式分析
基于AST的代码分析,结合正则表达式和关键字能力
优点:结合语法和语义,可以引入作用域等更多概念,更准确。
缺点:无法应对所有场景,另外,基于AST来分析得到的数据流,忽略了分支、跳转、循环等影响执行过程顺序的条件,缺少控制流信息。
基于IR/CFG的代码分析等自制的中间语言数据结构分析
属于当前比较主流的代码分析方案,例如被源伞,实现了多种语言生成统一的IR,这样一来对于新语言的扫描支持难度就变得大大减少。
IR:是一种类似于汇编语言的线性代码,其中各个指令按照顺序执行。其中现在主流的IR是三地址码(四元组),例如llvm的IR。
CFG:(Controlflowgraph)控制流图,在程序中简单的控制流单位是一个基本块,在CFG中,每一个节点代表一个基本块,每一个边代表一个可控的控制转移,整个CFG代表了整个代码的的控制流程图。基于IR来生成得到CFG。
基于QL(QueryLanguage)分析
例如codeQL,把源代码转化成一个可查询的数据库,通过对源代码工程进行关键信息分析提取,构成一个关系型数据库。安全漏洞、Bug和其他错误被建模为可针对从代码中提取的数据库执行的查询。
常用的静态程序分析技术:
数据流分析
数据流分析收集程序运行到不同位置时各个值的信息和它们随时间变化的信息。污点检验是一个的通过数据流分析进行程序风险检测的例子,它会找到所有的可能被使用者修改的变量(也就是有“污点”、不安全的变量),并阻止这些变量在被修复安全漏洞前被使用。
控制流分析
用于分析程序控制流结构的静态分析技术,目的在于生成程序的控制流图,在污点分析、编译器设计、程序分析、程序理解等领域都有重要应用。
指针分析
指针分析主要用于分析指针所有可能指向的对象,它会分析出一个指针所指向的内存位置和所对应的对象。可以用于调用分析、代码优化、Bug追查、安全性分析与验证测试。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加抖音太原达内IT培训学习了解。