程序静态分析的分析技术及实践

程序静态分析的分析技术及实践,第1张

程序静态分析(Program Static Analysis)可以帮助软件开发人员、质量保证人员查找代码中存在的结构性错误、安全漏洞等问题,从而保证软件的整体质量。还可以用于帮助软件开发人员快速理解文档残缺的大规模软件系统以及系统业务逻辑抽取等系统文档化等领域。 如开发20年以上的金融核心COBOL系统,动辄上千万行代码的系统规模。对于理解这样规模的系统,基于程序静态分析的辅助理解工具就能发挥积极作用。

本文首先对程序静态分析的特点、常用静态分析技术、静态分析实现方式进行描述,然后通过一个实例讲解了程序静态分析的执行过程。 程序静态分析是与程序动态分析相对应的代码分析技术,它通过对代码的自动扫描发现隐含的程序问题,主要具有以下特点:

(1)不实际执行程序。动态分析是通过在真实或模拟环境中执行程序进行分析的方法,多用于性能测试、功能测试、内存泄漏测试等方面。与之相反,静态分析不运行代码只是通过对代码的静态扫描对程序进行分析。

(2)执行速度快、效率高。目前成熟的代码静态分析工具每秒可扫描上万行代码,相对于动态分析,具有检测速度快、效率高的特点。

(3)误报率较高。代码静态分析是通过对程序扫描找到匹配某种规则模式的代码从而发现代码中存在的问题,例如可以定位strcpy()这样可能存在漏洞的函数,这样有时会造成将一些正确代码定位为缺陷的问题,因此静态分析有时存在误报率较高的缺陷,可结合动态分析方法进行修正。 (1)词法分析:从左至右一个字符一个字符的读入源程序,对构成源程序的字符流进行扫描,通过使用正则表达式匹配方法将源代码转换为等价的符号(Token) 流,生成相关符号列表,Lex为常用词法分析工具。

(2)语法分析:判断源程序结构上是否正确,通过使用上下文无关语法将相关符号整理为语法树, Yacc为常用工具。

(3)抽象语法树分析:将程序组织成树形结构,树中相关节点代表了程序中的相关代码,目前已有javacc/ Antlra等抽象语法树生成工具。

(4)语义分析:对结构上正确的源程序进行上下文有关性质的审查。

(5)控制流分析:生成有向控制流图,用节点表示基本代码块,节点间的有向边代表控制流路径,反向边表示可能存在的循环;还可生成函数调用关系图,表示函数间的嵌套关系。

(6)数据流分析:对控制流图进行遍历,记录变量的初始化点和引用点,保存切片相关数据信息。

(7)污点分析:基于数据流图判断源代码中哪些变量可能受到攻击,是验证程序输入、识别代码表达缺陷的关键。

(8)无效代码分析,根据控制流图可分析孤立的节点部分为无效代码。

程序静态分析是在不执行程序的情况下对其进行分析的技术,简称为静态分析。而程序动态分析则是另外一种程序分析策略,需要实际执行程序。大多数情况下,静态分析的输入都是源程序代码,只有极少数情况会使用目标代码。静态分析这一术语一般用来形容自动化工具的分析,而人工分析则往往叫做程序理解。

静态分析越来越多地被应用到程序优化、软件错误检测和系统理解领域。Coverity Inc的软件质量检测产品就是利用静态分析技术进行错误检测的成功代表。国内某软件公司的闪蝶(BlueMropho)代码分析平台,是利用程序静态分析技术专注于大型机遗留系统的代码理解领域,尤其擅长分析千万行代码规模级的COBOL系统。

按照你的要求将list中的元素根据指定字符进行切片的Python程序如下

#!/usr/bin/python

b=[]

a=["啊啊啊啊啊", "呃呃呃。鹅鹅鹅鹅鹅鹅饿"]

for i in range(0,len(a)):

 b=b+a[i]split("。")

print(b)

for i in range(1,1001):

  if str(pow(i,2))[len(str(i))(-1):]==str(i):

      print(i,end="/")

结果是:1/5/6/25/76/376/625/

思路如下:

利用range函数遍历1到1000的整数

充分利用了Python自身的特性,将数字问题转换成字符串比较利用数字类型的转换

转换成字符串就可以利用切片了不说太详细了自己思考一下吧

看你是台式机还是笔记本了,台式机的话,内存至少8G以上,CPU最好选I5四代以上,硬盘500G以上;如果是笔记本,配置要高一点,内存16G以上,硬盘固态500G,CPU最好选I7以上。

电子计算机通称电脑,是现代一种用于高速计算的电子计算机器,可以进行数值计算、逻辑计算,具有存储记忆功能,能够按照程序运行,自动、高速处理海量数据。

患者从甲医院看病后,再到乙医院看病时,乙医院经常要会诊患者在甲医院做的病理,其目的有三:其一、乙医院就不重复取活检了,这样可以节省患者时间和费用;其二、乙医院往往是上级医院,甲医院病理报告提供的信息不全或不放心甲医院的病理结果;其三、是法律上的问题,也就是如果甲医院诊断错了,而乙医院也照着甲医院的诊断进行治疗,造成的后果乙医院也得承担。

,借出病理切片(玻璃片);

2、到乙医院就诊,门诊医生开出病理会诊单,患者交费后带着病理切片到乙医院病理科会诊。一般会诊结果很快即可出来。

注意:借阅病理切片时尽量将所有病理切片(包括多次的手术或活检的切片、免疫组化片子)均借出;有时乙医院要求甲医院出具石蜡块,以便重新切片或作免疫组化也应满足。

以上就是关于程序静态分析的分析技术及实践全部的内容,包括:程序静态分析的分析技术及实践、在python中如何将list中的元素根据指定字符进行切片、如何用Python切片求出1000以内的同构数等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9731305.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存